Díky za odpovědi.
Upřímně - absolutně začínám se sockety, ale chtěl jsem si dát nějaký cíl, k čemu chci dojít. Nicméně jsem si zkoušel do konzole nějaké věci a nemůžu přijít na jednu záležitost.
Jednoduchý program - Client pošle zprávu, server si ji přečte a kontaktuje VŠECHNY připojené klienty. Má domněka byla, že si třídu Echoer uložím do kolekce a poté budu přistupovat k socketům -> outputstream -> poslat zprávu všem přes for cyklus. Ale bohužel ta zpráva dojde jen k jednomu. Mohl bych poprosit, co je na tom špatně a jak to opravit, aby to dělalo to, co jsem popisoval? Děkuji mnohokrát
public class Main{
public static List<Echoer> echoerList = new ArrayList<>();
public static void main(String[] args) {
try (ServerSocket serverSocket = new ServerSocket(5000)) {
while(true){
Echoer echoer = new Echoer(serverSocket.accept());
echoerList.add(echoer);
echoer.start();
System.out.println("Client connected...");
}
} catch (Exception e) {
System.out.println("SERVER EXCEPTION " + e);
}
}
}
public class Echoer extends Thread {
private Socket socket;
public Echoer(Socket socket){
this.socket = socket;
}
public void run(){
try {
BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter output;
while(true){
String echoString = input.readLine();
System.out.println("RECEIVED FROM CLIENT " + echoString);
if(echoString != null){
System.out.println("SIZE " + Main.echoerList.size());
for(Echoer e : Main.echoerList){
output = new PrintWriter(e.getSocket().getOutputStream(), true);
output.println("HELLO!!!!!");
}
}
}
} catch(Exception e){
System.out.println("EXCEPTION IN THREAD");
} finally {
try {
socket.close();
} catch(IOException e){
System.out.println("EXCEPTION DURING CLOSING!!!");
}
}
}
public Socket getSocket(){
return this.socket;
}
}
public class Client{
public static void main(String[] args) {
try(Socket socket = new Socket("localhost", 5000)){
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter stringToEcho = new PrintWriter(socket.getOutputStream(), true);
Scanner sc = new Scanner(System.in);
String echoString;
String response;
do {
System.out.println("Enter string to be deechoed");
echoString = sc.nextLine();
stringToEcho.println(echoString);
if(!echoString.equals("exit")){
response = bufferedReader.readLine();
System.out.println(response);
}
} while(!echoString.equals("exit"));
} catch(IOException e){
System.out.println("CLIENT EXC");
}
}
}