Ci sto provando da un po 'e voglio che più client ricevano più input contemporaneamente.
C'è un problema, voglio che il server stampi "Ciao" su tutti i client se un client dice "print2all Hi".
So come elaborarlo per stamparlo, solo stampare per TUTTI i clienti è il problema.Ho creato un server Java con socket, come si fa a stampare su TUTTI i socket?
Ecco quello che ho finora.
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();
}
client
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();
Ragazzi. Se si desidera utilizzare questo come un server di antipasto, do il permesso pieno = P
Non credo che le prese sono thread-safe, però, così si potrebbe finire con la stampa simultanea dal thread presa possedere la presa e quello che trasmette. –
@ChristopheBiocca: hai ragione, ma l'OP sembra avere problemi molto più semplici. Comunque parlerò della sicurezza dei thread, grazie! –
+1 Se si utilizza una raccolta dalla libreria della concorrenza, è possibile aggiungere il thread e rimuovere il socket per mantenere l'elenco. È probabile che aggiungere e rimuovere il gestore della connessione sia più utile in quanto è possibile ottenere correttamente lo stato delle connessioni. –