Ich habe es schon eine Weile versucht und möchte, dass mehrere Clients gleichzeitig mehrere Eingänge empfangen.
Es gibt ein Problem, ich möchte, dass der Server "Hi" an alle Clients ausgibt, wenn ein Client "print2all Hi" sagt.
Ich weiß, wie man es verarbeitet, um es zu drucken, nur um auf alle Clients zu drucken, ist das Problem.Ich habe einen Java-Server mit Sockets erstellt, wie funktioniert das Drucken auf ALL-Sockets?
Hier ist, was ich bisher habe.
Server
try{
try{
server = new ServerSocket(25565);
} catch (Exception e){
e.printStackTrace();
}
while (isListening){
new SocketThread(server.accept()).start();
}
server.close();
} catch (Exception e){
e.printStackTrace();
}
SocketThread
try {
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String inputLine, outputLine;
Processor kkp = new Processor();
out.println("Hi!");
while ((inputLine = in.readLine()) != null) {
outputLine = kkp.Proccess(inputLine,this.socket);
out.println(outputLine);
}
out.close();
in.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
Kunde
Processor p = new Processor(); socket = new Socket("localhost",25565); out = new PrintWriter(socket.getOutputStream(), true); in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
String fromServer;
String fromUser;
out.println("print2all Hi")
socket.close();
Jungs. Wenn Sie dies als Starter-Server verwenden möchten, gebe ich volle Erlaubnis = P
Ich glaube nicht, dass Steckdosen obwohl Thread-sicher sind, so dass Sie bei gleichzeitigem Druck aus der Steckdose Gewinden besitzen die Buchse könnten am Ende und die eine Sendung. –
@ChristopheBiocca: Sie haben Recht, aber OP scheint viel einfachere Probleme zu haben. Aber ich werde über Fadensicherheit erwähnen, danke! –
+1 Wenn Sie eine Sammlung aus der Concurrency-Bibliothek verwenden, können Sie den Thread hinzufügen und schließlich den Socket entfernen, um die Liste zu verwalten. Wahrscheinlich ist das Hinzufügen und Entfernen des Handlers der Verbindung nützlicher, da Sie den Zustand der Verbindungen gut erkennen können. –