Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 客户机-服务器交互问题_Java_Client_Chat - Fatal编程技术网

Java 客户机-服务器交互问题

Java 客户机-服务器交互问题,java,client,chat,Java,Client,Chat,我试图通过常规TCP协议在java中实现一个最小的聊天服务器。聊天服务器将在特定端口上侦听。我的问题是,如果有多个客户端向同一端口发送消息,如果消息不包含客户端的IP地址或目标名称,服务器能否区分客户端并单独响应每个客户端 为了让我的问题更清楚一点,假设服务器得到一个只包含 "user: abc to-user:efg message:"Hello"" 我是否可以在java中找到发送数据包的客户端的地址并回复到相同的地址,或者我是否需要在消息本身中包含一些标识符,如“sender ip=1.

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

为了让我的问题更清楚一点,假设服务器得到一个只包含

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

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

是的,每个连接都是独立的-对于每个连接,您将有一个不同的流来读取。不过,由您将相关用户信息与连接关联起来。

多个客户端永远不会通过同一端口发送数据。您的客户端通过同一端口进行通信的唯一时间是连接到服务器的时间。在服务器中,只要
ServerSocket
接收到连接,它就会返回一个新的
Socket
。此套接字是以下内容的组合:服务器IP+服务器端口和客户端IP+客户端端口。每个套接字的服务器IP和服务器端口相同;不同之处在于客户端IP和端口。通常,当
ServerSocket
返回以侦听传入的连接时,该套接字被传递到新线程以进行进一步的通信。一旦对套接字有了引用,就可以调用
socket..getInetAddress().getHostAddress()
来获取远程IP,调用
socket.getPort()
来获取相应客户端的端口