Java ServerSocket已绑定但未侦听

时间:2017-07-12 07:24:42

标签: java windows java-8 serversocket netstat

我有以下代码用于keepalive serversocket,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就在println之后:

  TCP    0.0.0.0:19876          0.0.0.0:0              LISTENING       7944
  TCP    [::]:19876             [::]:0                 LISTENING       7944

紧随println之后的Netstat:

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]

知道这里有什么问题,或者我如何调试问题?

1 个答案:

答案 0 :(得分:1)

你必须调用accept方法才能听:

boolean isStopped = false;
while(!isStopped){
    Socket clientSocket = serverSocket.accept();

    //do something with clientSocket
}