Java ServerSocket 绑定但不侦听



我有以下代码用于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
}

最新更新