2011-02-12 181 views
0

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

,使我的问题有点更清晰,假设服务器获取仅包含

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

我能知道在java中谁发送数据包的客户端的地址和同一响应回包地址或我是否需要在邮件中包含一些标识符,如“sender-ip = 1.1.1.1”

回答

1

多个客户端永远不会通过同一端口发送数据。您的客户端通过同一个端口聊天的唯一时间是他们将连接到服务器的时间。在服务器中,只要ServerSocket收到连接,它就会返回一个新的Socket。该套接字是以下组合:服务器IP +服务器端口和客户端IP +客户端端口。服务器IP和服务器端口对于每个套接字都是相同的;客户端IP和端口有什么不同。通常这个套接字被传递到一个新的线程进行进一步的通信,而ServerSocket回到监听传入的连接。一旦你有一个插座的参考,你可以拨打socket..getInetAddress().getHostAddress()获得远程IP和socket.getPort()获取相应客户端的端口。

1

是的,每个连接都是分开的 - 每个连接都有不同的流。尽管将相关的用户信息与连接关联起来了。