我用Java实现了一个客户端-服务器模式的聊天系统。但是,在dos是DataOutputStream对象的情况下,我对dos.writeUTF(msgout)
有一个问题。
假设客户端1和客户端2连接到服务器。服务器能够在其DataInputStream中处理来自两个客户端的消息。但是,在回写时,服务器只会将消息发送到上一个客户端(本例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
来自main方法的片段,其中连接是固定的:
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) {
//
}
}
在https://pastebin.com/NWms7TfF中可以找到ClientHandler类
https://stackoverflow.com/questions/50668943
复制相似问题