我试图通过常规TCP协议在java中实现最小的聊天服务器。聊天服务器将侦听特定端口。我的问题是,如果有多个客户端向同一端口发送消息,服务器是否可以区分客户端并在消息不包含客户端的IP地址或目的地名称时单独响应每个客户端?
让我的问题更清楚一点,假设服务器获取的数据包只包含
"user: abc to-user:efg message:"Hello""
我可以在java中找到发送数据包的客户端的地址并回复到同一地址,或者我需要在消息本身中包含一些标识符,如“sender-ip = 1.1.1.1”
答案 0 :(得分:1)
是的,每个连接都是独立的 - 您将为每个连接读取不同的流。您可以将相关用户信息与连接相关联。
答案 1 :(得分:1)
多个客户端永远不会通过同一端口发送数据。客户端通过同一端口进行通话的唯一时间是它们将连接到服务器的时间。在服务器中,只要ServerSocket
收到连接,它就会返回一个新的Socket
。此套接字是以下组合:服务器IP + ServerPort和客户端IP +客户端端口。每个套接字的服务器IP和服务器端口相同;不同的是客户端IP和端口。通常将此套接字传递给新线程以进行进一步通信,而ServerSocket
返回以侦听传入连接。一旦有了对套接字的引用,就可以调用socket..getInetAddress().getHostAddress()
来获取远程IP,并socket.getPort()
来获取相应客户端的端口。