Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';不要在Android上使用ServerSocket_Android_Sockets_Tcp_Bind_Serversocket - Fatal编程技术网

Can';不要在Android上使用ServerSocket

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):*

我试图在Android设备上使用
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。