Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
yura91
1 / 25 / 2
Регистрация: 23.10.2013
Сообщений: 2,317
#1

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

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

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

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

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

Передача по TCP
Можно текстовую часть данных передать, по TCP, байтами а бинарные данные...

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

TCP/IP клиент
Здравствуйте, Имеется хост, который слушает порт 50001, на андроиде написал...

TCP клиент в NDK
Как реализовать TCP клиент используя андроид ndk на С++?? Я слышал, что у...

14
vxg
Модератор
3231 / 2034 / 319
Регистрация: 13.01.2012
Сообщений: 7,885
25.05.2016, 15:00 #2
Цитата Сообщение от yura91 Посмотреть сообщение
проверить доступность сервера
мама миа.. что значит "клиент будет слать данные в никуда"? если у вас TCP то создается подключение и если оно будет прервано то send просто вернет ошибку
0
Pablito
2652 / 2134 / 726
Регистрация: 12.05.2014
Сообщений: 7,450
Завершенные тесты: 1
25.05.2016, 15:01 #3
пинг - не показатель
0
yura91
1 / 25 / 2
Регистрация: 23.10.2013
Сообщений: 2,317
25.05.2016, 15:09  [ТС] #4
мама миа.. что значит "клиент будет слать данные в никуда"?
Может не правильно выразился я имею ввиду, что как узнать, что сервер доступен в данный момент(это же пинг). И тогда уже подключаться и передавать данные, а то если сервер недоступен то клиент даже подключится к нему не сможет. Ну так это лучше всего проверить это?
0
vxg
Модератор
3231 / 2034 / 319
Регистрация: 13.01.2012
Сообщений: 7,885
25.05.2016, 15:11 #5
Цитата Сообщение от yura91 Посмотреть сообщение
Ну так это лучше всего проверить это?
лично я не вижу криминала в том что бы проверить это непосредственно попытавшись подключиться к серверу для передачи данных
0
yura91
1 / 25 / 2
Регистрация: 23.10.2013
Сообщений: 2,317
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 то тогда уже передавать данные?
0
vxg
Модератор
3231 / 2034 / 319
Регистрация: 13.01.2012
Сообщений: 7,885
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) {
            ...
        }
0
zealot01
43 / 43 / 21
Регистрация: 24.08.2015
Сообщений: 136
Завершенные тесты: 1
25.05.2016, 15:24 #8
По протоколу TCP всё уже придумано до нас. Достаточно попытаться получить данные от сервера стандартными процедурами за приемлемое время и больше ничего не требуется.
0
Alexvp
111 / 75 / 8
Регистрация: 03.08.2014
Сообщений: 380
25.05.2016, 15:37 #9
Цитата Сообщение от zealot01 Посмотреть сообщение
за приемлемое время
Сколько будет "в граммах"?
0
vxg
Модератор
3231 / 2034 / 319
Регистрация: 13.01.2012
Сообщений: 7,885
25.05.2016, 15:39 #10
Alexvp, я думаю имелось ввиду не "ожидание до тех пор пока смерть сокета не разлучит нас" а некий таймаут если это применимо для системы
0
yura91
1 / 25 / 2
Регистрация: 23.10.2013
Сообщений: 2,317
25.05.2016, 15:55  [ТС] #11
setSoTimeout() там можно задать таймаут - как время ожидания ответа от сервера?
0
vxg
Модератор
3231 / 2034 / 319
Регистрация: 13.01.2012
Сообщений: 7,885
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.
0
Alexvp
111 / 75 / 8
Регистрация: 03.08.2014
Сообщений: 380
25.05.2016, 19:16 #13
Цитата Сообщение от vxg Посмотреть сообщение
а некий таймаут
Реально интересно, есть ли какие-нибудь ограничения по тайм-ауту ожидания ответа от веб-сервера. В своих разработках я ставлю наугад 15-20 секунд.
0
Pablito
25.05.2016, 19:23
  #14

Не по теме:

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

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

TCP Socket Client
Всем доброго времени суток. Пытаюсь открыть сокет между Android Client и...

Не работает TCP-соединение
Помогите найти ошибку, код запускается, доходит до ServerSocket s...

Обмен файлами по TCP
Есть рабочий клиент на андроид. 4 кнопки. 1.Установить соединение 2.Обмен...

Передача SQLite таблицы по TCP
Подскажите как сделать хотя бы в теории, от примера не откажусь.


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

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

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