Client-Server-Client communication using Sockets

后端 未结 3 2034
旧巷少年郎
旧巷少年郎 2020-12-14 05:06

I am building a small chat application in which client A wants to send something to client C with server B in between. First of all is this a correct approach for the proble

3条回答
  •  孤城傲影
    2020-12-14 05:35

    When your clients connect to the server, your server creates a Socket for it, here it is Socket socket = ss.accept();, your socket variable will be holding that client.

    now if you just keep adding your client socket to a arraylist in your while loop, you will have a list of clients actively connected with your server like:

    after the accept:

    clients = new ArrayList();
    Socket socket = ss.accept();
    os = new DataOutputStream(socket.getOutputStream());
    clients.add(os);
    

    Now as you have all the clients in that clients arraylist, you can loop through it, or with some protocol define which client should i send the data after reading.

    Iterator it = clients.iterator();
    while ((message = reader.readLine()) != null) { //reading    
        while (it.hasNext()) {
            try {
                DataOutputStream oss = it.next();
                oss.write(message);//writing
                oss.flush();
            }
            catch (Exception e) { }
         }
     }
    

    This will loop through all the available clients in the arraylist and will send to all. you can define ways to send to only some.

    For example: maintain a ActiveClients arraylist and with some GUI interaction may be or maybe, define what all clients you want to send the message. Then add just those clients outputStreams to ActiveClients

    ActiveClients.add(clients.get(2));
    

    or remove them, if you don't want them.

    ActiveClients.remove(clients.get(2));
    

    and now just loop through this arraylist to send the data as above.

提交回复
热议问题