我有以下用于保持 Activity 服务器套接字、jdk 1.8、windows7 的代码:
serverSocket = new ServerSocket();
serverSocket.setReuseAddress(true);
serverSocket.bind(new InetSocketAddress(port)); // <-- port is 19876
System.out.println("Server bound on " + port + " " + serverSocket);
问题是有时当我运行它时,它会在 netstat 中显示正在监听,但有时却不会。由于没有异常(exception),我希望它实际上是绑定(bind)的,但它是随机的。
正确操作,netstat就在println之后:
TCP 0.0.0.0:19876 0.0.0.0:0 LISTENING 7944
TCP [::]:19876 [::]:0 LISTENING 7944
Netstat 就在 println 之后:
C:\Users\tmplr>netstat -ano | find "198"
C:\Users\tmplr>netstat -ano | find "198"
在这两种情况下都没有异常,并且 println 产生相同的结果:
Server bound on 19876 ServerSocket[addr=0.0.0.0/0.0.0.0,localport=19876]
知道这里出了什么问题或者如何调试这个问题吗?
最佳答案
你必须调用accept方法来监听:
boolean isStopped = false;
while(!isStopped){
Socket clientSocket = serverSocket.accept();
//do something with clientSocket
}
关于Java ServerSocket 已绑定(bind)但未监听,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45051034/