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
答案 0 :(得分:2)
要检查的几件事情:
1)你可以从你的win7盒子ping Android设备 - 即,他们在同一个wifi网络上,并且它愿意路由数据包。 ping 192.168.2.9 应该工作。
2)您在Windows上使用telnet命令的形式是接受自定义端口5050而不是标准端口。 telnet 192.168.2.9 5050 应工作,但如果有任何疑问,你可以尝试使用netcat或putty的副本而不是telnet。
3)实际上正在生成流量 - 在win7框上运行类似tcpdump的工具,或者如果可用(或者你有root并可以添加它)手机,并看到有5050连接尝试端口。
4)通常我还建议您在手机上使用netstat -n来验证您是否正在侦听端口5050 - 您的程序内测试似乎已经完成了但是它不会伤害可以肯定。您还可以查看手机上是否安装了netcat(作为“nc”),并使用adb命令行中的netcat进行本地连接尝试,而不是您的程序测试本身,但这不应该物质
5)你也可以尝试不同的端口
6)确保win7框上没有阻止出站流量的防火墙
7)确保wifi路由器上没有防火墙或子网分离,阻止您正在使用的端口上的客户端之间的流量,或有线以太网端口(如果这是win7框所在的位置)和wifi客户端之间的流量。您的手机的IP地址是192.168。 2 .x - 这有点可疑 - 这可能意味着您的wifi作为有线以太网的独立子网运行。
8)使用adb port forward
在模拟器上试用您的程序 9)尝试在手机上执行类似操作的其他程序,可能是ssh服务器或Web服务器,愿意在无特权的更高端口上运行,以便不需要root。