2017-07-12 2 views
0

Ich habe den folgenden Code für eine Keep-Alive-Serversocket, jdk 1.8, Windows7:Java Serversocket gebunden, aber nicht hören

serverSocket = new ServerSocket(); 
    serverSocket.setReuseAddress(true); 
    serverSocket.bind(new InetSocketAddress(port)); // <-- port is 19876 
    System.out.println("Server bound on " + port + " " + serverSocket); 

Das Problem ist manchmal, wenn ich das laufen, es zeigt sich in netstat hören, aber es manchmal nicht. Da es keine Ausnahme gibt, würde ich erwarten, dass es tatsächlich gebunden ist, aber es ist zufällig.

Der einwandfreie Betrieb, netstat kurz nach dem println:

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

Netstat kurz nach dem println:

C:\Users\tmplr>netstat -ano | find "198" 

C:\Users\tmplr>netstat -ano | find "198" 

In beiden Fällen gibt es keine Ausnahme und die println erzeugt das gleiche:

Server bound on 19876 ServerSocket[addr=0.0.0.0/0.0.0.0,localport=19876] 

Irgendeine Idee, was hier falsch ist oder wie könnte ich das Problem debuggen?

Antwort

1

Sie müssen die Methode akzeptieren rufen sie zu hören:

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

    //do something with clientSocket 
} 
+0

Warum ist es im ersten Fall hören ohne akzeptieren zu telefonieren? In meinem Verständnis ist 'listen' bereits im Aufruf von' bind' enthalten. – Templar

Verwandte Themen