我有以下代码用于keepalive服务器套接字,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 中侦听,但有时不会。由于没有例外,我希望它实际上是绑定的,但它是随机的。
正确的操作,netstat 就在打印ln之后:
TCP 0.0.0.0:19876 0.0.0.0:0 LISTENING 7944
TCP [::]:19876 [::]:0 LISTENING 7944
Netstat 就在 println 之后:
C:Userstmplr>netstat -ano | find "198"
C:Userstmplr>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
}