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),你可以从你的WIN7箱ping到Android设备 - 也就是说,它们是相同的WiFi网络上它愿意路由数据包。 ping 192.168.2.9 应该工作。
2)您在Windows上使用telnet命令的一种形式是接受自定义端口5050而不是标准端口。 telnet 192.168.2.9 5050 应该工作,但如果有任何疑问,您可以尝试抓取netcat或腻子的副本来代替telnet。
3)该流量实际上正在生成 - 在win7框中运行类似tcpdump的工具,或者如果可用(或者您有root用户并且可以添加它)电话,并且看到有连接尝试5050端口。
4)正常情况下我也建议你用netstat -n在手机上确认你是在端口5050监听 - 似乎你在程序测试已经做到了,但它不会伤害是当然。您还可以查看netcat是否安装在手机上(如'nc'),并使用adb命令行中的netcat进行本地连接尝试,这不是您的程序测试本身,但这应该没关系。
5)您也可以尝试不同的端口
6)确保有一个在WIN7箱阻挡没有防火墙出站交通
7)确保有一个在无线网络没有防火墙或子网分离路由器阻止您正在使用的端口上的客户端之间的流量,或有线以太网端口(如果是win7盒的位置)和WiFi客户端之间的流量。你的电话的IP地址是192.168,这有点可疑。 .x - 这可能意味着您的wifi将作为与有线以太网分开的子网运行。
8)使用前向亚行端口
9)尝试别人的程序,它在手机上类似的东西,也许是一个SSH服务器或Web服务器,愿意在一个没有特权的更高版本上运行的模拟器试试你的计划端口为了不需要root。
感谢您的详细回复,所有LAN机器都是192.168.2。*家族,同一个WiFi网络的另一台笔记本电脑部件可以访问,正如你所建议的,我已经在设备上执行了netstat -n,这显示服务器正在侦听tcp6,我正在使用tcp4连接(tcp6 0 ::: 5050 ::: * LISTEN),Q现在是我如何强制服务器同时升级到v4和v6 IP? – NadavRub
只要按照建议在仿真器上测试端口转发,并在仿真器上接受连接...考虑到这一点,可能会导致我的Galaxy S2 I9100上的连接尝试失败? (.accept()永远不会返回)?!?!?!?! – NadavRub
也许看看如果在Galaxy上adb端口转发工作,哪里的wifi没有?但是,ipv6的东西可能是关键 - 你可能需要使用setSocketFactory(),并指向你重写create()来指定AF_INET以显式获取ipv4的地方。在ServerSocket()和ipv6上进行搜索会导致在各种平台上发生类似问题的一些提示,其中一些jdk版本的提示可能正在改变。 –
- 1. 在接受套接字连接
- 2. 卡在接受套接字
- 3. ServerSocket接受()不接受Android上的连接
- 4. Android套接字编程套接字永不连接
- 5. C#套接字编程:服务器不接受客户端连接
- 6. 侦听套接字连接,而不接受在Linux上调用
- 7. Java中的套接字编程。接受设备的连接请求
- 8. Java Serversocket不接受连接
- 9. 被动套接字不接受ftp
- 10. 未能接受Java中的套接字连接
- 11. 接受与ACE_SOCK_Acceptor的连接
- 12. 接受多个后续连接到套接字
- 13. asyncsocket接受套接字但未连接到主机
- 14. Android客户端套接字正在连接,但服务器套接字不接受?
- 15. EAGAIN错误接受阻塞套接字
- 16. 套接字只接受特定地址?
- 17. 接受TCP和UDP连接?
- 18. 为什么Windows上的ActivePerl程序停止接受套接字连接?
- 19. Android本机可执行文件如何接受外部套接字连接?
- 20. 如何让Postgres接受远程连接
- 21. TcpListener停止接受或接受断开的连接
- 22. 客户端套接字接受的数据与服务器套接字不同
- 23. Spark独立群集不接受连接
- 24. Nodejs:WebSocket似乎不接受连接
- 25. python不接受09但接受07
- 26. Java套接字/服务器编程:套接字未连接
- 27. 套接字编程 - C - 选择连接
- 28. 套接字编程。连接问题(...)api
- 29. 为什么accept()系统调用不接受新的连接,直到关闭以前的连接套接字
- 30. Paremeters不接受
检查您的防火墙设置。 – javment