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

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

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

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

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

У меня есть TCP сервер под Windows и TCP клиент на андроид. Я устанавливаю между ними соединение и передаю данные. Но может же же быть такая ситуация, что сервер не доступен в тот момент, когда клиент пытается к нему подключится и клиент будет напрасно передавать данные в никуда(если сервер то не доступен). И чтобы точно знать, что клиент к серверу подключился и данные можно передавать нужно сначала пропинговать соединение.Как это лучше сделать? Можно отправить запрос с подключением на сервер и подождать ответ на клиенте определенное время, если ответ, в течение определенного промежутка времени, не пришел, значит соединение не установлено и нужно попытаться снова подключиться к серверу через определенное время, можно так делать? Или есть лучше вариант как пропинговать соединение между клиентом и сервером(проверить доступность сервера)??
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.05.2016, 14:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Пинг TCP сервера (Программирование Android):

Чтение данных с сервера (TCP клиент) - Программирование Android
Добрый день подскажите как реализовать чтение данных с сервера непрерывным потоком и выводить все в TextView. отправку на сервер...

Создаем TCP сервер (на основе сервера MicroBridge LightWeight) - Программирование Android
Добрый день, Уважаемые разработчики! Помогите пожалуйста, пытаюсь передать данные между ардуино и телефоном. С телефона отправляю...

Передача по TCP - Программирование Android
Можно текстовую часть данных передать, по TCP, байтами а бинарные данные передать JSONом?? Потерь данных не будет нормально будет читаться...

TCP клиент - Программирование Android
Доброго времени суток. Мне стало нужно написать простое android-приложение, которое соединяется по беспроводной локальной сети с...

TCP/IP клиент - Программирование Android
Здравствуйте, Имеется хост, который слушает порт 50001, на андроиде написал такую функцию для отправки данных на хост. На хост...

Не работает TCP-соединение - Программирование Android
Помогите найти ошибку, код запускается, доходит до ServerSocket s = new ServerSocket(9999); дальше не работает, об...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
vxg
Модератор
3157 / 1959 / 218
Регистрация: 13.01.2012
Сообщений: 7,493
25.05.2016, 15:00 #2
Цитата Сообщение от yura91 Посмотреть сообщение
проверить доступность сервера
мама миа.. что значит "клиент будет слать данные в никуда"? если у вас TCP то создается подключение и если оно будет прервано то send просто вернет ошибку
Pablito
2473 / 1918 / 595
Регистрация: 12.05.2014
Сообщений: 6,742
Завершенные тесты: 1
25.05.2016, 15:01 #3
пинг - не показатель
yura91
30 / 28 / 2
Регистрация: 23.10.2013
Сообщений: 2,255
25.05.2016, 15:09  [ТС] #4
мама миа.. что значит "клиент будет слать данные в никуда"?
Может не правильно выразился я имею ввиду, что как узнать, что сервер доступен в данный момент(это же пинг). И тогда уже подключаться и передавать данные, а то если сервер недоступен то клиент даже подключится к нему не сможет. Ну так это лучше всего проверить это?
vxg
Модератор
3157 / 1959 / 218
Регистрация: 13.01.2012
Сообщений: 7,493
25.05.2016, 15:11 #5
Цитата Сообщение от yura91 Посмотреть сообщение
Ну так это лучше всего проверить это?
лично я не вижу криминала в том что бы проверить это непосредственно попытавшись подключиться к серверу для передачи данных
yura91
30 / 28 / 2
Регистрация: 23.10.2013
Сообщений: 2,255
25.05.2016, 15:14  [ТС] #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
Модератор
3157 / 1959 / 218
Регистрация: 13.01.2012
Сообщений: 7,493
25.05.2016, 15:18 #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 #8
По протоколу TCP всё уже придумано до нас. Достаточно попытаться получить данные от сервера стандартными процедурами за приемлемое время и больше ничего не требуется.
Alexvp
107 / 71 / 8
Регистрация: 03.08.2014
Сообщений: 344
25.05.2016, 15:37 #9
Цитата Сообщение от zealot01 Посмотреть сообщение
за приемлемое время
Сколько будет "в граммах"?
vxg
Модератор
3157 / 1959 / 218
Регистрация: 13.01.2012
Сообщений: 7,493
25.05.2016, 15:39 #10
Alexvp, я думаю имелось ввиду не "ожидание до тех пор пока смерть сокета не разлучит нас" а некий таймаут если это применимо для системы
yura91
30 / 28 / 2
Регистрация: 23.10.2013
Сообщений: 2,255
25.05.2016, 15:55  [ТС] #11
setSoTimeout() там можно задать таймаут - как время ожидания ответа от сервера?
vxg
Модератор
3157 / 1959 / 218
Регистрация: 13.01.2012
Сообщений: 7,493
25.05.2016, 16:05 #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 #13
Цитата Сообщение от vxg Посмотреть сообщение
а некий таймаут
Реально интересно, есть ли какие-нибудь ограничения по тайм-ауту ожидания ответа от веб-сервера. В своих разработках я ставлю наугад 15-20 секунд.
Pablito
25.05.2016, 19:23
  #14

Не по теме:

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

Alexvp
107 / 71 / 8
Регистрация: 03.08.2014
Сообщений: 344
25.05.2016, 19:47 #15
Паблито, меня интересует не доступная разрядность переменной, а ограничения в http-протоколе и иже с ним
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.05.2016, 19:47
Привет! Вот еще темы с ответами:

TCP Socket Client - Программирование Android
Всем доброго времени суток. Пытаюсь открыть сокет между Android Client и сервером под виндой (когда то написал на билде, использую в...

TCP клиент в NDK - Программирование Android
Как реализовать TCP клиент используя андроид ndk на С++?? Я слышал, что у андроид такое же ядро как и у Linux. То есть на андроид ndk будет...

Контрольная сумма TCP пакета - Программирование Android
Как вычислить контрольную сумму отправляемого TCP пакета на сервер? Ну например при помощи md5 как вычислить контрольную сумму? Какие...

TCP клиент под андроид - Программирование Android
Доброго времени суток. Имеется TCP сервер под Windows, написанный на Delphi XE5, также имеется программа под Android, написанная там же....


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
25.05.2016, 19:47
Ответ Создать тему
Опции темы

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