Java ServerSocket 已绑定(bind)但未监听

标签 java windows java-8 serversocket netstat

我有以下用于保持 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/

相关文章:

java - 使用握手引理查找具有偶数和的子数组的数量

java.lang.IllegalArgumentException : argument type mismatch

java - 切换 Activity 时崩溃

windows - 将包含可执行文件的文件夹制作成可执行文件

在eclipse juno中使用mingw和MPICH2编译MPI程序

java - 为什么返回的函数需要额外的转换(不兼容的类型)?

java - Java 8 中的 CompletableFuture

java - 如何压缩图像直到达到固定字节大小

java - 在列表中搜索名称并显示所有匹配项

java - 如何确定关闭我的 Java 应用程序的原因?