#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. потрясающая, приятная работа