首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java中的套接字-如何将DataOutputStream写到特定的客户端?

Java中的套接字-如何将DataOutputStream写到特定的客户端?
EN

Stack Overflow用户
提问于 2018-06-04 01:09:40
回答 1查看 598关注 0票数 1

我用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类

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-04 01:20:51

这并不好:

static DataOutputStream dos;

然后是:

dos.writeUTF(msgout);

您创建了一个静态DataOutputStream字段,然后想知道为什么使用该字段只表示一个输出流。首先,你应该去掉静态字段,虽然这不会解决你的问题(但它可能有助于修复其他问题)。相反,如果您想要写入特定的输出流,则需要一种方法来获取对它的引用。考虑创建一个HashMap来保存您的ClientHandler对象,并使用您希望使用的任何唯一标识符将它们添加到映射中,以帮助您检索它们,可能是clientName字符串字段或clientId字符串字段(不要使用数字作为id)。假设ClientHandler有一个返回其输出流的getDos()方法(如果它没有,那么它应该得到一个)。然后,您可以在需要时从映射中获取ClientHandler,通过getDos()提取其输出流,然后将其写入。

附注,它不适合张贴到代码库的链接。相反,请在您的问题中发布所有相关代码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50668943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档