【问题标题】:Get client id using multithreaded java server使用多线程 Java 服务器获取客户端 ID
【发布时间】:2017-01-21 18:50:02
【问题描述】:

我目前正在尝试创建一个多线程 Java 套接字服务器。 我可以在我的客户中使用“ID;MESSAGE;”发送“私人”消息。

消息到达正确的客户端,但问题是服务器总是显示所有消息都来自同一个客户端(客户端 ID 0),但事实并非如此。

这是我的服务器http://pastebin.com/Dzh5Ynvj

服务器输出

21:02:55 [DSS-Server] [Client#0] connected.
21:02:58 [DSS-Server] [Client#1] connected.
21:13:11 [DSS-Server] [Client#0] > 0;This is send from client 0
21:13:18 [DSS-Server] [Client#0] > 1;This also
21:13:30 [DSS-Server] [Client#0] > 0;But this comes from client 1

【问题讨论】:

  • 您也可以发布您的客户代码吗?服务器如何接收来自客户端的消息?
  • 天哪,我忘记了一半信息:/ 这是客户端处理程序pastebin.com/z7bdX4sL,这里基本上是客户端pastebin.com/KwxkpGCW
  • @AlonDattner 你的构造函数不应该捕获那个异常:它应该抛出它。如果BufferedReader由于任何原因无法构造,enture对象就没有用了,所以让它返回给new ClientHandler()的调用者是没有意义的。
  • 谢谢,我也要解决这个问题:)

标签: java multithreading sockets networking server


【解决方案1】:

在您的 ClientHandler 代码中,您尚未将 id 参数分配给您班级的 id 成员。

public ClientHandler(Socket client, int id) {
   this.id = id; // ADD THIS LINE
    try {

        //Get BufferedReader from client
        this.client = client;
        reader = new BufferedReader(new InputStreamReader(client.getInputStream()));
    } catch (IOException e) {
        e.printStackTrace();
    }
}

ClientHandler 构造函数中添加this.id = id;。应该这样做。

【讨论】:

    猜你喜欢
    • 2015-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多