Передача сообщения, отправленного на сервер от клиента, всем другим подключенным клиентам, кроме отправителя - PullRequest
0 голосов
/ 31 января 2020

В рамках задания, которое я выполняю, мы создаем простое приложение для чата в java с использованием сокетов. Все сообщения отправляются / принимаются в консоли.

Вот часть, на которой я застрял.

Требования. (Pi c)

Итак, что будет лучшим способом для go об этом? У меня есть возможность для нескольких клиентов подключиться к серверу и отправить ему сообщение, но когда я отправляю сообщение с сервера, не все клиенты получают его. Кроме того, как я могу различить guish, какой клиент отправил какое сообщение, чтобы не ретранслировать его обратно? Вот мой код.

Клиент. java

    while (canConnect = true) {
        Socket socket = new Socket("localhost", 8080);

        DataInputStream din = new DataInputStream(socket.getInputStream());
        DataOutputStream dout = new DataOutputStream(socket.getOutputStream());
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String inputMsg = "";
        String outputMsg = "";

        while (!inputMsg.equals("quit")) {
            outputMsg = br.readLine();
            dout.writeUTF(userName + ": " +outputMsg);
            inputMsg = din.readUTF();
            System.out.printf(inputMsg);
        }
        socket.close();
        // client dies here
    }

Сервер. java

 public static void main(String[] args) throws IOException {
     ServerSocket serverSocket = null;
     int clientNum = 0; // keeps track of how many clients were created

     try {
         serverSocket = new ServerSocket(8080); //New serverSocket on port 8080
         System.out.println(serverSocket);
     } catch (IOException e) {
         System.out.println("Could not listen on port: 8080");
         System.exit(-1);
     }

     while (true) {
         Socket clientSocket = null;
         try {
             System.out.println("Waiting for client " + (clientNum + 1)
                + " to connect!");
             clientSocket = serverSocket.accept();

             System.out.println("Server got connected to a client"
                + ++clientNum);
             Thread t = new Thread(new ClientHandler(clientSocket, clientNum));
             t.start();

         } catch (IOException e) {
             System.out.println("Accept failed: 8080");
             System.exit(-1);
         }
     } // end while loop
} // end of main method

}

class ClientHandler implements Runnable {
    Socket s; // this is socket on the server side that connects to the CLIENT
    int num; // keeps track of its number just for identifying purposes

    ClientHandler(Socket s, int n) {
        this.s = s;
        num = n;
    }

    public void run() {
        try {
            DataInputStream din = new DataInputStream(s.getInputStream());
            DataOutputStream dout = new DataOutputStream(s.getOutputStream());
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

            String inputMsg = "";
            String outputMsg = "";

            while(!inputMsg.equals("quit")){
                inputMsg = din.readUTF();
                System.out.println(inputMsg);
                outputMsg = br.readLine();
                dout.writeUTF("Server: " + outputMsg);
                dout.flush();
            }
            s.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...