Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
den_droid
6 / 7 / 1
Регистрация: 18.05.2015
Сообщений: 191
#1

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

21.09.2016, 06:07. Просмотров 592. Ответов 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
Доброго времени суток.Пытаюсь сделать простое клиент-серверное приложение....

Socket server over 3g
Привет. Хотел программу написать, сервер сокет, но что то в сети 3g не...

Socket Server, Client
Доброго времени суток. Решил разобраться с сокетами. Но почему-то сообщения не...

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

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

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

7
Pablito
2652 / 2134 / 726
Регистрация: 12.05.2014
Сообщений: 7,450
Завершенные тесты: 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_
77 / 75 / 9
Регистрация: 08.08.2013
Сообщений: 623
24.09.2016, 21:33 #5
den_droid,
Java
1
dataOutputStream.writeUTF(msg);
В msg добавь в конец перевод каретки
0
_Night_Scream_
77 / 75 / 9
Регистрация: 08.08.2013
Сообщений: 623
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_
77 / 75 / 9
Регистрация: 08.08.2013
Сообщений: 623
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
Всем привет. Сразу к делу. Работаю с компонентом ServerSocket, при приеме...

Время ожидания ответа socket
Код, который посылает GET запрос и выводит ответ. class Name { public...

Бесперерывное получение ответа от сервера(Socket)
Собственно как настроить бесперерывное получение? на данный момент я получаю...

Теряются данные из потока
Доброго времени суток, господа форумчане!Уже которую неделю бьюсь головой в...


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

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

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