For educational purposes, I tried to create a server and a client, where the server receives data from several clients and echoes each message. The problem is that I'm trying to get the server to send an echo to all clients at once.
public class SocketServer { ArrayList<MyRunnable> ts = new ArrayList<MyRunnable>(); ServerSocket serv; static MainServerThread mst = new MainServerThread(); // ^ IDE(eclipse) underlines this as the problem SocketServer() { EventQueue.invokeLater(mst); } public static void main(String[] args) { Thread tr = new Thread(mst); tr.start(); } void send(String s) { for (int i = 0; i < ts.size(); i++) { MyRunnable tmp = ts.get(i); tmp.sendToClient(s); } } class MainServerThread implements Runnable { public void run() { try { serv = new ServerSocket(13131); boolean done = false; while (!done) { Socket s = serv.accept(); MyRunnable r = new MyRunnable(s); Thread t = new Thread(r); ts.add(r); t.start(); } } catch(Exception e) { e.printStackTrace(); } } } class MyRunnable implements Runnable { Socket sock; PrintWriter out; Scanner in; MyRunnable(Socket soc) { sock = soc; } public void run() { try { try { out = new PrintWriter(sock.getOutputStream(), true); in = new Scanner(sock.getInputStream()); boolean done = false; while (!done) { String line = in.nextLine(); send("Echo: " + line); System.out.println("Echo: " + line); if (line.trim().equals("BYE")) done = true; } } finally { sock.close(); } } catch (Exception e) { e.printStackTrace(); } } public void sendToClient(String s) { out.println(s); } } }
I searched and answered and saw many similar questions, but none of them helped me. Hope you can point out my mistake. Thanks in advance.
source share