Я реализовал чат, используя модель клиент-сервер в Java.Однако у меня есть одна проблема с dos.writeUTF(msgout)
, где dos является объектом DataOutputStream.
Допустим, клиент 1 и клиент 2 подключаются к серверу.Сервер может обрабатывать сообщения от обоих клиентов в своем DataInputStream.Однако при обратной записи сервер отправит сообщение только клиенту last (в данном случае 2).Соединение с клиентом 1 остается установленным, но сервер как бы «забывает» о клиенте 1. Я не хочу вещать, но я просто хочу знать, как я могу dos.writeUTF(msgout)
, например, первый клиент?Вот мой кусок кода с сервера.
Статические переменные (я использую Swing в качестве GUI):
static DataOutputStream dos;
static DataInputStream dis;
static Vector<ClientHandler> ar = new Vector<>(); // Vector for active clients
static int i = 0; // Client counter
Часть основного метода, где устанавливается соединение:
ServerSocket ss = new ServerSocket(1234);
Socket s;
while (true) {
s = ss.accept();
dis = new DataInputStream(s.getInputStream());
dos = new DataOutputStream(s.getOutputStream());
ClientHandler mtch = new ClientHandler(s, "Client" + (i+1), dis, dos);
Thread t = new Thread(mtch);
ar.add(mtch); // Add client to active clients
t.start();
i++;
}
Я создал метод для отправки сообщений (когда я нажимаю кнопку):
public void send() {
try {
String msgout = "";
msgout = txtChat.getText().trim();
if (!msgout.equals("")) {
dos.writeUTF(msgout); // Need to get specific here. How to write to Client's 1 DataInputStream?
}
} catch (Exception e) {
//
}
}
Здесь находится класс ClientHandler https://pastebin.com/NWms7TfF