schließen Sie alle Steckdosen nach es zu benutzen? auf der server-Seite
Muss ich alle schließen des sockets nachdem es zu benutzen? Wo Stelle ich Ihnen in diesem code? Mein Programm funktioniert in der Regel, wenn ich es laufen lasse. Allerdings, wenn ich starten Sie es erneut, es sagte: "Exception in thread "main" java.net.BindException: Address already in use: JVM_Bind". Deshalb denke ich, dass ich nicht alle schließen die Steckdose nach der Benutzung.
import java.io.*;
import java.net.*;
import java.util.*;
public class Server2 {
public static void main(String args[]) throws Exception {
int PORT = 5555; //Open port 5555
//open socket to listen
ServerSocket server = new ServerSocket(PORT);
Socket client = null;
while (true) {
System.out.println("Waiting for client...");
//open client socket to accept connection
client = server.accept();
System.out.println(client.getInetAddress()+" contacted ");
System.out.println("Creating thread to serve request");
ServerStudentThread student = new ServerStudentThread(client);
student.start();
}
}
}
- Sie scheinen Ihre eigene Frage beantwortet. Haben Sie versucht, Ihren eigenen Vorschlag?
- Cantos: Aber ich weiß nicht, wie sockets zu schließen und wohin damit. Wo immer ich die Buchse.schließen(), sagte, es falsch.
- Sie brauchen, um einen shutdown-hook , Wann immer Sie erhalten Prozess beenden signal setzen dann den exitServer zu wahren,sollte dies eine volatile-variable und passiert in einem separaten thread.Auch ein Blick auf den Quellcode des Tomcat-HttpServer, bekommen Sie vielleicht eine Idee!!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Call
server.close()
imfinally
block.try(ServerSocket server = new ServerSocket(PORT)) {...}
. Es werden die Ressourcen freizugeben richtig am Ende (wird tun, null-check usw..)Address already in use: JVM_Bind
- bedeutet, dass Ihr Betrieb system ist nicht geschlossen-Buchse nach der vorherigen Nutzung. Es wird auf timeout über 30-180 Sekunden.Ich nicht wirklich wissen, wie man dies in java, sondern in
C
code es kann getan werden, und wie diese, vorbind
system-Funktion aufrufen:Das bedeuten: setzen Sie das flag (option)
SO_REUSEADDR
zusockfd
Buchse.In java müssen existieren geeignete Mechanismen für die das gleiche tun.
Werden kann, können Sie versuchen, wie dieser