2010-07-09 2 views
1

Я пытался подключить два устройства Android (2.1) через сокеты TCP. Жизненно важная часть кода:, соединяющий два устройства Android через TCP-сокеты

Сервер: ServerSocket serverSocket = new ServerSocket (SERVERPORT);

Клиент: Розетка = новое гнездо (serverAddr, SERVERPORT);

Странно, что я могу заставить его работать, если клиент является эмулятором, но тот же код выходит из строя, если он работает на реальных устройствах. Провал в стороне клиента является:


java.net.SocketException: No route to host 
    at org.apache.harmony.luni.platform.OSNetworkSystem.connectSocketImpl(Native 
Method) 
    at org.apache.harmony.luni.platform.OSNetworkSystem.connect(OSNetworkSystem. 
java:114) 
    at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java: 
245) 
    at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java: 
220) 
    at java.net.Socket.startupSocket(Socket.java:780) 
    at java.net.Socket.(Socket.java:314) 

Я попытался с Wi-Fi и мобильной сети тоже, они были в той же подсети, оба раза, разрешение в Интернет, то сервер адресуется через реальный 192.168 .. IP ,
Я планирую изменить реализацию сокета с помощью setCustomSocketImplFactory().
Проблема имеет решающее значение в процессе внедрения протокола MSRP для Android.
Может ли кто-нибудь дать мне совет?

+0

Что вы имеете в виду реальный IP, если программы работают на двух мобильных телефонах? – 2010-08-03 07:19:30

+0

Я только что пытался сказать, что проблема заключается не в том, что я использую 10.0.2.15 IP для реальных устройств. – Diepie

ответ

1

Очень мало мобильных телефонов имеют общедоступные IP-адреса. Большинство из них находятся за NAT.

Вы можете рассмотреть возможность использования C2DM вместо:

http://code.google.com/android/c2dm/

+0

Спасибо за предложение, что нет необходимости в глобально маршрутизируемых IP-адресах, так как есть RFC-совместимые решения для NAT- обход (STUN, TURN, ICE и т. д.). – Diepie

Смежные вопросы