【问题标题】:client server interaction question客户端服务器交互问题
【发布时间】:2012-02-24 21:49:40
【问题描述】:

我正在尝试通过常规 TCP 协议在 java 中实现一个最小的聊天服务器。聊天服务器将侦听特定端口。我的问题是,如果有多个客户端向同一个端口发送消息,如果消息不包含客户端的 IP 地址或目标名称,服务器是否可以区分客户端并分别响应?

为了让我的问题更清楚一点,假设服务器收到一个仅包含的数据包

 "user: abc to-user:efg message:"Hello""

我能否在 java 中找到发送数据包的客户端地址并回复相同的地址,或者我是否需要在消息本身中包含一些标识符,例如“sender-ip = 1.1.1.1”

【问题讨论】:

    标签: java client chat


    【解决方案1】:

    多个客户端永远不会通过同一个端口发送数据。您的客户端将通过同一个端口进行通信的唯一时间是他们将连接到服务器时。在服务器中,每当ServerSocket 收到连接时,它都会返回一个新的Socket。此套接字是以下内容的组合:Server IP+ServerPort 和 Client IP+Client Port。每个套接字的服务器 IP 和服务器端口将相同;不同的是客户端 IP 和端口。通常这个套接字被传递给一个新线程以进行进一步的通信,而ServerSocket 则返回以侦听传入的连接。获得对套接字的引用后,您可以调用 socket..getInetAddress().getHostAddress() 获取远程 IP,调用 socket.getPort() 获取相应客户端的端口。

    【讨论】:

      【解决方案2】:

      是的,每个连接都是独立的 - 每个连接都有不同的数据流可供读取。不过,您可以将相关的用户信息与连接关联起来。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-25
        • 2016-07-28
        • 2015-08-14
        • 2011-05-26
        • 1970-01-01
        • 2016-03-30
        • 2011-06-06
        • 2011-11-23
        相关资源
        最近更新 更多