我有以下代码用于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]
知道这里有什么问题,或者我如何调试问题?
答案 0 :(得分:1)
你必须调用accept方法才能听:
boolean isStopped = false;
while(!isStopped){
Socket clientSocket = serverSocket.accept();
//do something with clientSocket
}