Android-Android TCP-соединение

Вся документация, примеры и вопросы, которые я видел до сих пор по TCP-соединениям с Android, были между устройством Android и компьютером. Какой бы ненадежной ни была беспроводная связь, возможно ли установить TCP-соединение клиент-сервер между устройствами Android через WiFi, и если да, то как?

Редактировать: я думаю, мне следует подробнее остановиться на моей ситуации. Мой Droid не отвечает на ping и не принимает входящие TCP-запросы от чего бы то ни было, пока я сначала не сделаю Droid клиентом, а свой ноутбук — сервером. После того, как это начальное соединение установлено, я могу выполнить ping со своего ноутбука или сделать Droid сервером, а мой ноутбук - клиентом. Чего я не могу сделать, так это сделать одного Droid сервером, а другого клиентом, я всегда получаю ошибку «Нет маршрута к хосту».

Такое ощущение, что что-то блокирует входящие соединения, если только устройство не инициирует соединение с чем-то другим, и даже в этом случае единственный запрос, который устройство примет, будет с этим устройством. Как мне сделать из моего Droid сервер, принимающий все входящие TCP-запросы с любого устройства в моей локальной интрасети?


person kurifu    schedule 16.07.2011    source источник
comment
У меня нет ответа, но я могу сказать вам, что у меня точно такая же проблема на моем Samsung Galaxy S II. Может ли это быть какой-то мерой безопасности, чтобы попытаться избежать распространения вирусов между различными устройствами в общедоступных сетях Wi-Fi? Некоторые интернет-провайдеры могут иметь брандмауэры, предназначенные для защиты от такого рода угроз, но эти брандмауэры хотят предоставить любую помощь, если устройства в локальной сети могут напрямую общаться друг с другом...?   -  person avl_sweden    schedule 10.12.2011


Ответы (4)


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

person Shawn Walton    schedule 16.07.2011
comment
Запуск сервера на Droid не работает, так как устройство не принимает входящие соединения, если только оно ранее не инициировало TCP-соединение в качестве клиента с другим устройством. В этом случае, когда устройство функционирует как сервер, единственное входящее соединение, которое оно будет принимать, будет исходить от устройства из предыдущего сеанса. Это единственный способ, которым я заставил свое устройство Droid работать в качестве сервера, и даже тогда оно не принимает подключения от любых других устройств в локальной сети. - person kurifu; 17.07.2011
comment
Возможно, вы путаете концепции точки доступа/клиента Wi-Fi с концепциями сервера/клиента tcp? Также может случиться так, что использование телефона в качестве tcp-клиента приводит к тому, что Wi-Fi переходит в полностью подключенное и активное состояние — в противном случае время ожидания может истечь. Возможно, вы можете заставить сервер пинговать или запрашивать точку доступа, DNS-сервер или что-то еще каждые несколько минут, пока он должен быть активен. - person Chris Stratton; 17.07.2011
comment
Может быть, ОС или какое-то другое приложение блокирует входящие соединения? Я тоже хочу знать, так как у меня есть приложение, в которое я хочу добавить мультиплеер. - person Shawn Walton; 17.07.2011
comment
@Chris Stratton: проблема не имеет ничего общего с точкой доступа Wi-Fi, поскольку ping работает с другими мобильными телефонами в той же локальной интрасети. @notverycreative: я тоже так думал, но у меня на устройстве нет других приложений. Мне еще предстоит ковыряться в ядре, но проблема может быть в нем... - person kurifu; 19.07.2011
comment
@kurifu Я говорил о том, что Android отключает Wi-Fi-радио, что он обычно делает для экономии энергии, когда он не используется. Подключение в качестве клиента может запустить его снова. - person Chris Stratton; 19.07.2011

Одна из замечательных особенностей Интернета заключается в том, что Интернету все равно, устанавливаете ли вы соединение между двумя ПК, ПК и телефоном или между двумя телефонами. Я бы посмотрел документацию Socket, этого должно быть достаточно, чтобы вы катится.

person rjacks    schedule 16.07.2011
comment
У меня работает реализация сокета, проблема не в подключении устройств через Интернет, проблема в подключении устройств в локальной интрасети, которая всегда вызывает ошибку «Нет маршрута к хосту», даже с разрешениями, установленными в манифесте. - person kurifu; 17.07.2011

Это, конечно, возможно. Единственная проблема - выяснить IP-адрес. Я не ожидаю, что у телефона будет фиксированный IP-адрес ... Однако, если где-то в Интернете есть фиксированный сервер «входа», IP-адрес которого известен обоим телефонам, тогда они могут выполнить рукопожатие через этот сервер и после этого продолжить одноранговую связь. -вглядываться.

person JBM    schedule 16.07.2011

ре; Единственная проблема - выяснить IP-адрес. Я не ожидаю, что у телефона будет фиксированный IP.

Попробуй это; Используйте веб-браузер на телефоне, чтобы войти на этот веб-сайт: он должен предоставить вам IP-адрес.

http://whatismyipaddress.com/

person user3067712    schedule 02.02.2014