Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
den_droid
6 / 7 / 1
Регистрация: 18.05.2015
Сообщений: 191
#1

Теряются данные ответа Socket Server - Программирование Android

21.09.2016, 06:07. Просмотров 500. Ответов 7

Здравствуйте!
Динамические данные (данные которые сервер шлёт не по запросу на открытый поток клиента) не приходят на клиент. Точнее приходят, если пошевелить поток. Также я вырубил сервер и пошевелил поток. Данные пришли с мертвого сервера. Отсюда вывод, что они приходят но не обрабатываются. В чем может быть проблема?
Под "пошевелить" я подразумеваю вызвать следующим образом: newTransmission("test", null, false)
Первый раз я подключаюсь к серверу: newTransmission("test", "ip", true)
При чем, сервер пишет в файл что данные успешно отправлены, а клиент тупо не принимает. Данные сервер может отправить в любое время.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
public void newTransmission(final String msg, final String ip, final boolean newConnect) {
        Runnable runnable = new Runnable() {
            public void run() {
                //if (type.equals("server-msg-history")) {
                try {
                    if (newConnect) {
                        client = null;
                        client = new Socket(ip, 12864); 
                        client.setSoTimeout(1000); // пробовал и без этого
                        dataOutputStream = new DataOutputStream(client.getOutputStream()); 
                        dataInputStream = new DataInputStream(client.getInputStream()); 
                    }
                    dataOutputStream.writeUTF(msg);
                    ddServerAnswer = dataInputStream.readUTF();
                    
                    tvInf.post(new Runnable() {
                            @Override
                            public void run() {
                                Toast.makeText(getApplicationContext(), ddServerAnswer, Toast.LENGTH_SHORT).show();
                                try {
                                    JSONArray jaAnsw = new JSONArray(ddServerAnswer);
                                    switch (jaAnsw.getString(0)) {
                                        case "player-id":
                                            Toast.makeText(getApplicationContext(), "You player id: " + jaAnsw.get(1), Toast.LENGTH_LONG).show();
                                            player_id = jaAnsw.getInt(1);
                                            currentPlayer = (TextView) findViewById(jaAnsw.getInt(1));
                                            break;
                                    }
                                } catch (JSONException e) {}
                                catch (Exception e) {
                                    Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show();
                                }
                                
                            }
                        });
                    
                    new DenDroidTools().createFile(ddServerAnswer, new File(Environment.getExternalStorageDirectory() + "/dendroid"), "test_client_" + System.currentTimeMillis() + ".txt");
                    //dataInputStream.close();
                    //dataOutputStream.close();
                    //client.close();
                } catch (UnknownHostException e) {
                    e.printStackTrace();
                    //UnknownHostExceptionErr = "true";
                } catch (IOException e) {
                    e.printStackTrace();
                    //UnknownHostExceptionErr = "io";
                    //Toast.makeText(getApplicationContext(), "Ошибка: IOException", Toast.LENGTH_LONG).show();
                } catch (Exception e) {
 
                }
            }
        };
 
        thread = new Thread(runnable);
        thread.start();
    }
Надеюсь на помощь, заранее спасибо!

Добавлено через 17 часов 0 минут
Проблемма не с выводом а с обработкой. Как исправить? Пробовал уже и вайлом...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.09.2016, 06:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Теряются данные ответа Socket Server (Программирование Android):

Socket Android Client and Java Socket Server - Программирование Android
Доброго времени суток.Пытаюсь сделать простое клиент-серверное приложение. Клиент - приложение на Android устройстве. Сервер - Приложение...

Socket server over 3g - Программирование Android
Привет. Хотел программу написать, сервер сокет, но что то в сети 3g не работает. Через домашний роутер с wifi и проброс портов все...

Socket Server, Client - Программирование Android
Доброго времени суток. Решил разобраться с сокетами. Но почему-то сообщения не приходят... Клиент: messsage = "Test"; client...

Server socket как ограничить число потоков - Программирование Android
Добрый день! Есть server socket, который ожидает подключение клиентов. Для каждого клиента создается свой поток. s...

Nodejs net socket server and android socket client - Node.js
Добрый день Форумчане нужно помощь гуру! Решил с другом написать сервер на ноде с использование сокетов и андроид клиент отправки сокет. Но...

Windows socket server python + socket client js - Python
Здравствуйте пытаюсь решить такую задачу, на веб странице реализовал soket клиент на js, и socket server, сокет сервер получает данные от...

7
Pablito
2534 / 2013 / 627
Регистрация: 12.05.2014
Сообщений: 7,065
Завершенные тесты: 1
21.09.2016, 11:03 #2
почему не использовать BufferedReader и realLine() ?
0
den_droid
6 / 7 / 1
Регистрация: 18.05.2015
Сообщений: 191
21.09.2016, 15:48  [ТС] #3
Паблито, а это поможет в моей проблеме?
0
den_droid
6 / 7 / 1
Регистрация: 18.05.2015
Сообщений: 191
22.09.2016, 16:31  [ТС] #4
Не помогло
0
_Night_Scream_
76 / 75 / 8
Регистрация: 08.08.2013
Сообщений: 612
24.09.2016, 21:33 #5
den_droid,
Java
1
dataOutputStream.writeUTF(msg);
В msg добавь в конец перевод каретки
0
_Night_Scream_
76 / 75 / 8
Регистрация: 08.08.2013
Сообщений: 612
26.09.2016, 14:54 #6
den_droid, решил проблему?
0
den_droid
6 / 7 / 1
Регистрация: 18.05.2015
Сообщений: 191
19.10.2016, 17:15  [ТС] #7
_Night_Scream_, делал, не помогло. Порылся на просторах гугла, нашел информацию о том, что должен постоянно идти пинг. Что, нет других вариантов решения?
0
_Night_Scream_
76 / 75 / 8
Регистрация: 08.08.2013
Сообщений: 612
19.10.2016, 21:27 #8
den_droid, не могу согласиться, ведь вы говорите о постоянных пакетах от сервера.
setSoTimeout поставьте побольше, 10 сек например
есть параметр keepAlive, попробуйте включить его.
0
19.10.2016, 21:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.10.2016, 21:27
Привет! Вот еще темы с ответами:

Server Socket, Asynchronous socket error 10053 - C++ Builder
Всем привет. Сразу к делу. Работаю с компонентом ServerSocket, при приеме данных возникает asynchronous socket error 10053. Сервер...

Время ожидания ответа socket - PHP Сети
Код, который посылает GET запрос и выводит ответ. class Name { public function get($ip, $port=80) { set_time_limit(1); ...

Бесперерывное получение ответа от сервера(Socket) - C#
Собственно как настроить бесперерывное получение? на данный момент я получаю так: int bytesRec = sendr.Receive(receiveBytes);

Теряются данные в Interbase - Firebird/InterBase
6 лет назад разработала программу в Borland C++Buildere 6 на основе СУБД Interbase. Все это время программой активно пользовались, ввели...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.