Как вы не отправляете сообщение самому себе на сервере с несколькими чатами?

#java

#java

Вопрос:

У меня есть сервер чата с несколькими клиентами, и когда кто-то отправляет сообщение, я хочу, чтобы оно отправлялось всем другим клиентам, но не тому, кто отправляет сообщение. В настоящее время сообщение отправляется всем, включая человека, отправившего сообщение? Ниже можно найти код для clientThread.файл java.

 import java.net.*;
import java.io.*;
import javax.swing.*;

public class ClientThread extends Thread {

    Socket socket;
    String clientName;
    BufferedReader inputStream;
    PrintWriter outputStream;
    JLabel connectionStatusLabel;

    public ClientThread(Socket socket, JLabel connectionStatusLabel) {
        try {
            this.socket = socket;
            this.connectionStatusLabel = connectionStatusLabel;
            inputStream = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            outputStream = new PrintWriter(socket.getOutputStream());

        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    public void run() {
        try {

            while (true) {
                String clientMessage = inputStream.readLine();
                if (clientMessage.equals("remove")) {
                    Server.clientsList.remove(this);
                    this.socket.close();
                    for (ClientThread clientThread : Server.clientsList) {
                        clientThread.outputStream.println(clientName " is disconnected");
                        clientThread.outputStream.flush();
                    }
                } else if (clientMessage.equals("client_name")) {
                    clientName = inputStream.readLine();
                    for (ClientThread clientThread : Server.clientsList) {
                        clientThread.outputStream.println(clientName " is connected");
                        clientThread.outputStream.flush();
                    }
                } else if (clientMessage.equals("message_broadcast")) {
                    String message = inputStream.readLine();
                    for (ClientThread clientThread : Server.clientsList) {
                        clientThread.outputStream.println(clientName   ": "   message);
                        clientThread.outputStream.flush();
                    }

                } else if (clientMessage.equals("message_single")) {
                    String messageTo = inputStream.readLine();
                    String message = inputStream.readLine();
                    for (ClientThread clientThread : Server.clientsList) {
                        if (clientThread.clientName.equals(messageTo)) {
                            clientThread.outputStream.println(clientName   ": "   message);
                            clientThread.outputStream.flush();
                        }
                    }
                }
            }

        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }


}
  

Ответ №1:

Просто проверьте, не совпадает ли текущий экземпляр из for цикла с экземпляром, в котором вы находитесь?

             } else if (clientMessage.equals("message_broadcast")) {
                String message = inputStream.readLine();
                for (ClientThread clientThread : Server.clientsList) {
                    if (clientThread != this) {
                        clientThread.outputStream.println(clientName   ": "   message);
                        clientThread.outputStream.flush();
                    }
                }
  

Комментарии:

1. потрясающая, приятная работа