1 回答

TA贡献1809条经验 获得超8个赞
是的,只要您不connect
将数据报套接字连接到特定的远程地址,同一个套接字就可以用于接收来自多个客户端的数据包。DatagramPacket
在这种情况下,每个实例都可以有不同的“远程地址”(IP 地址/端口号对)。并且您同样可以从那个套接字发送到任意数量的不同远程地址。本地(服务器端)套接字地址当然总是相同的(好吧,从技术上讲,本地端口总是相同的,但是如果您有多个网络接口,则本地 IP 地址可能会根据从数据包到达的地方和/或数据包被发送到的地方)。
您还可以使用一个“众所周知的”服务器套接字进行初始集合,然后为每个客户端创建一个新套接字。换句话说,让您的客户端最初向 20002 端口发送一条消息。然后服务器可以记下客户端的 IP 地址和端口,并创建一个新的服务器端套接字(不指定其本地端口)。然后connect
将该新套接字连接到客户端的 IP 地址和端口。连接套接字的副作用是操作系统将为新的服务器端套接字选择一个未使用的本地端口。
服务器和该客户端之间的所有后续通信都可以使用此特定于客户端的套接字。您还需要客户端注意初始回复消息中的地址/端口,以便将后续消息发送到服务器的客户端特定套接字。
如果您走后一条路线:由于您使用的是 UDP,因此您还需要为每个客户端套接字设置一些超时机制来处理异常终止(如果客户端在没有告诉您的情况下退出,UDP 不会通知您客户端已消失,而使用 TCP,您会在套接字上得到文件结尾)。
添加回答
举报