Code: Zaznacz cały
telnet localhost 8189
Wszystko działa. Loguję się, wpisuję jakiś ciąg znaków i serwer mi odpowiada tym samym. Ja jednak chciałbym uruchomić kilka sesji telnet-u i uzyskać efekt taki aby z jednego klienta wysłać jakiś ciąg znaków a serwer odpowiedział do wszystkich, tak aby na wszystkich zalogowanych klientach pojawił się tekst odpowiedzi.
Kombinowałem aby dynamicznie tworzyć PrintWriter'a ale zielonego pojęcia nie mam jak sprawdzić ilu klientów jest zalogowanych ... gdzieś by musiała być jakaś tablica po której trzeba by się przelecieć ... Ale zupełnie nie mam pomysłu gdzie jej szukać i jak adresować taki message do wszystkich klientów ?
Czy ktoś z kolegów podpowie mi jak to zrobić ?
Code: Zaznacz cały
import java.io.*;
import java.net.*;
import java.util.*;
public class RadioSerwer {
public static void main(String[] args) {
try{
int i =1;
ServerSocket s = new ServerSocket(8189);
while(true){
Socket incoming = s.accept();
System.out.println("Klient nr "+i);
Runnable r = new Nasluch(incoming, i);
Thread t = new Thread(r);
t.start();
i++;
}
}
catch(IOException e)
{
System.out.println("Błąd IOException: "+ e);
}
}
}
class Nasluch implements Runnable {
public Nasluch (Socket i, int c)
{
incoming = i; counter = c;
}
@Override
public void run()
{
try
{
try
{
InputStream inStream = incoming.getInputStream();
OutputStream outStream = incoming.getOutputStream();
Scanner in = new Scanner(inStream);
PrintWriter out = new PrintWriter(outStream,true /*autoFlush*/);
out.println("Połączono");
boolean done = false;
while(!done && in.hasNextLine())
{
String line = in.nextLine();
System.out.println("Echo: "+line);
out.println("Odp z serwera: "+line);
System.out.println(""+counter);
System.out.println(""+incoming);
System.out.println(""+outStream);
if(line.trim().equals("0"))
done=true;
System.out.println();
}
}
finally
{
incoming.close();
}
}
catch(IOException e)
{
System.out.println("Błąd IOException: "+ e);
}
}
private Socket incoming;
private int counter;
}