Программирование сокетов Android, принимаем, не принимаем соединения по локальной сети - PullRequest
0 голосов
/ 04 сентября 2011
I am implementing a SocketServer for an Android device.

The device I am using is Samsung G2 I9100.
1. The device is connected to LAN through WiFi
2. The IP returned to the device using 'NetworkInterface.getNetworkInterfaces()' & friends is 192.168.2.9
3. The server implementation is as follows:
   java.net.Socket socClient; 
   m_socServer = new java.net.ServerSocket(5050);
   m_socServer.setSoTimeout(0);
   socClient = m_socServer.accept();
4. Connection is accepted When using a local thread to connect eiather to 127.0.0.1:5050 or to192.168.2.9:5050
5. when trying to connect using eg. telnet @ Win7 'm_socServer.accept()' keeps on blocking and the connection timesout on the Win7 telnet session.
6. I have set the 'android.permission.INTERNET' permission.

Why does inproc connection attempts succeed while LAN connection attentps fail? 

Any help will be appreciated.

~Nadav

1 Ответ

2 голосов
/ 04 сентября 2011

Несколько вещей для проверки:

1) То, что вы можете пропинговать устройство Android из своего окна win7 - то есть, они находятся в одной сети Wi-Fi и готовы маршрутизировать пакеты.ping 192.168.2.9 должен работать.

2) Если вы используете форму команды telnet в Windows, принимает пользовательский порт 5050 вместо стандартного.telnet 192.168.2.9 5050 должен работать, но вы можете попробовать получить копию netcat или putty для использования вместо telnet, если есть сомнения.

3) Этот трафик фактически генерируется -запустите tcpdump-подобный инструмент на телефоне win7 или, если он доступен (или у вас есть root, и вы можете добавить его), и увидите, что предпринимаются попытки подключения к порту 5050.

4) Обычно ятакже предлагает использовать на телефоне команду netstat -n, чтобы проверить, прослушиваете ли вы порт 5050 - ваши тесты в программе , кажется, сделали это, но это не помешало бы быть уверенным.Вы также можете увидеть, установлен ли на телефоне netcat (как 'nc'), и использовать его из командной строки adb для локальной попытки подключения, которая не проверяет вашу программу , но это не должно иметь значения.

5) Вы также можете попробовать другой порт

6) Убедитесь, что на коробке win7 нет брандмауэра, блокирующего исходящий трафик

7)Убедитесь, что межсетевой экран или разделение подсети на маршрутизаторе Wi-Fi не блокируют трафик между клиентами на используемом вами порту, или между проводными портами Ethernet (если это окно win7) и клиентами Wi-Fi. Этонемного подозрительно, что IP-адрес вашего телефона 192.168. 2 .x - это может означать, что ваш Wi-Fi работает как отдельная подсеть от проводного Ethernet.

8) Попробуйте вашу программу наэмулятор, использующий порт adb forward

9) Попробуйте чужую программу, которая делает что-то похожее на телефоне, возможно, ssh-сервер или веб-сервер, желающийработать на непривилегированном порту более высокого уровня, чтобы не требовать root.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...