Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
yura91
28 / 26 / 2
Регистрация: 23.10.2013
Сообщений: 2,219
#1

Пинг TCP сервера - Android

25.05.2016, 14:56. Просмотров 202. Ответов 14
Метки нет (Все метки)

У меня есть TCP сервер под Windows и TCP клиент на андроид. Я устанавливаю между ними соединение и передаю данные. Но может же же быть такая ситуация, что сервер не доступен в тот момент, когда клиент пытается к нему подключится и клиент будет напрасно передавать данные в никуда(если сервер то не доступен). И чтобы точно знать, что клиент к серверу подключился и данные можно передавать нужно сначала пропинговать соединение.Как это лучше сделать? Можно отправить запрос с подключением на сервер и подождать ответ на клиенте определенное время, если ответ, в течение определенного промежутка времени, не пришел, значит соединение не установлено и нужно попытаться снова подключиться к серверу через определенное время, можно так делать? Или есть лучше вариант как пропинговать соединение между клиентом и сервером(проверить доступность сервера)??
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vxg
Модератор
3023 / 1825 / 190
Регистрация: 13.01.2012
Сообщений: 6,926
25.05.2016, 15:00     Пинг TCP сервера #2
Цитата Сообщение от yura91 Посмотреть сообщение
проверить доступность сервера
мама миа.. что значит "клиент будет слать данные в никуда"? если у вас TCP то создается подключение и если оно будет прервано то send просто вернет ошибку
Паблито
2017 / 1759 / 548
Регистрация: 12.05.2014
Сообщений: 6,240
Завершенные тесты: 1
25.05.2016, 15:01     Пинг TCP сервера #3
пинг - не показатель
yura91
28 / 26 / 2
Регистрация: 23.10.2013
Сообщений: 2,219
25.05.2016, 15:09  [ТС]     Пинг TCP сервера #4
мама миа.. что значит "клиент будет слать данные в никуда"?
Может не правильно выразился я имею ввиду, что как узнать, что сервер доступен в данный момент(это же пинг). И тогда уже подключаться и передавать данные, а то если сервер недоступен то клиент даже подключится к нему не сможет. Ну так это лучше всего проверить это?
vxg
Модератор
3023 / 1825 / 190
Регистрация: 13.01.2012
Сообщений: 6,926
25.05.2016, 15:11     Пинг TCP сервера #5
Цитата Сообщение от yura91 Посмотреть сообщение
Ну так это лучше всего проверить это?
лично я не вижу криминала в том что бы проверить это непосредственно попытавшись подключиться к серверу для передачи данных
yura91
28 / 26 / 2
Регистрация: 23.10.2013
Сообщений: 2,219
25.05.2016, 15:14  [ТС]     Пинг TCP сервера #6
Может Socket на null можно как то проверять? Если не null то передавать данные?

Добавлено через 1 минуту
Java
1
2
3
PrintWriter outprint = new PrintWriter(new BufferedWriter(
                        new OutputStreamWriter(socket.getOutputStream(), Charset.forName("UTF-8"))),
                        true);
Такой код выбросит NullPointerException, если не установлено соединение, так как socket будет null понимаете?

Добавлено через 2 минуты
Можно конечно попробовать подключится и проверить если socket != null то тогда уже передавать данные?
vxg
Модератор
3023 / 1825 / 190
Регистрация: 13.01.2012
Сообщений: 6,926
25.05.2016, 15:18     Пинг TCP сервера #7
yura91, боль...
чем так плохо?
Java
1
2
3
4
5
6
7
8
9
10
11
        SocketAddress addr = new InetSocketAddress(host, hostPort);
        Socket socket = new Socket();
        
        try {
            socket.connect(addr, 0);
            if (!socket.isConnected()) {
                ...
            }
        } catch (IOException e) {
            ...
        }
zealot01
42 / 42 / 16
Регистрация: 24.08.2015
Сообщений: 136
Завершенные тесты: 1
25.05.2016, 15:24     Пинг TCP сервера #8
По протоколу TCP всё уже придумано до нас. Достаточно попытаться получить данные от сервера стандартными процедурами за приемлемое время и больше ничего не требуется.
Alexvp
107 / 71 / 8
Регистрация: 03.08.2014
Сообщений: 344
25.05.2016, 15:37     Пинг TCP сервера #9
Цитата Сообщение от zealot01 Посмотреть сообщение
за приемлемое время
Сколько будет "в граммах"?
vxg
Модератор
3023 / 1825 / 190
Регистрация: 13.01.2012
Сообщений: 6,926
25.05.2016, 15:39     Пинг TCP сервера #10
Alexvp, я думаю имелось ввиду не "ожидание до тех пор пока смерть сокета не разлучит нас" а некий таймаут если это применимо для системы
yura91
28 / 26 / 2
Регистрация: 23.10.2013
Сообщений: 2,219
25.05.2016, 15:55  [ТС]     Пинг TCP сервера #11
setSoTimeout() там можно задать таймаут - как время ожидания ответа от сервера?
vxg
Модератор
3023 / 1825 / 190
Регистрация: 13.01.2012
Сообщений: 6,926
25.05.2016, 16:05     Пинг TCP сервера #12
yura91
setSoTimeout

public void setSoTimeout(int timeout) throws SocketException

Enable/disable SO_TIMEOUT with the specified timeout, in milliseconds. With this option set to a non-zero timeout, a read() call on the InputStream associated with this Socket will block for only this amount of time. If the timeout expires, a java.net.SocketTimeoutException is raised, though the Socket is still valid. The option must be enabled prior to entering the blocking operation to have effect. The timeout must be > 0. A timeout of zero is interpreted as an infinite timeout.
Alexvp
107 / 71 / 8
Регистрация: 03.08.2014
Сообщений: 344
25.05.2016, 19:16     Пинг TCP сервера #13
Цитата Сообщение от vxg Посмотреть сообщение
а некий таймаут
Реально интересно, есть ли какие-нибудь ограничения по тайм-ауту ожидания ответа от веб-сервера. В своих разработках я ставлю наугад 15-20 секунд.
Паблито
25.05.2016, 19:23
  #14

Не по теме:

Цитата Сообщение от Alexvp Посмотреть сообщение
есть ли какие-нибудь ограничения по тайм-ауту ожидания ответа от веб-сервера
да, Integer.MAX_VALUE которое можно передать в метод это почти 25 суток

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.05.2016, 19:47     Пинг TCP сервера
Еще ссылки по теме:

Android TCP Socket Client
Android Контрольная сумма TCP пакета
Android Не работает TCP-соединение
Android Чтение данных с сервера (TCP клиент)
Обращение к modbus устройству через TCP протокол Android

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

Или воспользуйтесь поиском по форуму:
Alexvp
107 / 71 / 8
Регистрация: 03.08.2014
Сообщений: 344
25.05.2016, 19:47     Пинг TCP сервера #15
Паблито, меня интересует не доступная разрядность переменной, а ограничения в http-протоколе и иже с ним
Yandex
Объявления
25.05.2016, 19:47     Пинг TCP сервера
Ответ Создать тему
Опции темы

Текущее время: 07:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru