Can';不要在Android上使用ServerSocket
我试图在Android设备上使用Can';不要在Android上使用ServerSocket,android,sockets,tcp,bind,serversocket,Android,Sockets,Tcp,Bind,Serversocket,我试图在Android设备上使用ServerSocket在端口上进行监听。我希望能够使用同一网络上的计算机通过WiFi连接到此端口 当我将它绑定到端口时,我没有得到任何异常,但是当我检查netstat时,它会显示: Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 (null):4040 (null):*
ServerSocket
在端口上进行监听。我希望能够使用同一网络上的计算机通过WiFi连接到此端口
当我将它绑定到端口时,我没有得到任何异常,但是当我检查netstat时,它会显示:
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 (null):4040 (null):* LISTEN
我尝试了无数种方法将其绑定到本地主机,即0.0.0.0,即设备的WiFi LAN IP地址,使用SocketteAddress
和InetAddress.getByName
。似乎什么都不管用
当我尝试从同一WiFi中的计算机连接到端口时(我尝试了netcat和Java的Socket.connect()
),我在Wireshark中看到的只是一个ARP请求:
Who has [phone's LAN address]? Tell [computer LAN address].
此请求会自动重复,直到超时
我尝试了相反的方法,在计算机上设置ServerSocket并从电话连接到该端口,效果非常好
我的测试手机是三星Spica i5700,带有定制ROM
有什么想法吗
编辑:
代码很简单,如下所示:
ServerSocket server = new ServerSocket();
server.setReuseAddr(true);
server.setTimeout(0);
server.bind(new InetSocketAddress(4040));
Socket client = null;
while((client = server.accept()) == null);
// Connected
enter code here
enter code here
请尝试按如下方式初始化服务器套接字,而不是使用server.bind: 服务器=新的服务器套接字(4040)
另外,server.accept()实际上会一直阻塞,直到建立连接为止,所以您不需要while循环(请参阅:())我可以使用
ServerSocket server = new ServerSocket( myTcpPort, 0, addr );
其中addr=您的手机地址。否则,它似乎只绑定到localhost(127.0.0.1)。另外,我使用的是8080端口。我也很难做到这一点,只能通过以下方式连接到我的Android服务器:
ServerSocket myServerSocket = new ServerSocket();
String hostname = getLocalIpAddress();
myServerSocket.bind(new InetSocketAddress(hostname, myPort));
其中hostname是本地IP,我使用本页中的getLocalIpAddress()函数获得:
你能给我看一些代码吗?你在清单文件中设置了正确的权限吗?我用一些代码更新了这个问题。是的,我在清单中设置了INTERNET权限。
ServerSocket.accept()
不能返回null。如何查找手机的InetAddress?如果省略hostname参数或传递null
它应该绑定到0.0.0。