我开发了一个 udp 应用程序,其中单个服务器能够处理“x”个客户端。
在我的服务器内部,有一个主线程不断地从客户端接收请求/数据,并不断将每个客户端的信息保存在列表中。
一旦请求来自新客户端(即来自其信息未保存在列表中的客户端),就会启动一个新线程并创建一个单独的套接字来为该特定客户端提供服务。
换句话说,对于每个客户端,都有一个单独的套接字和一个单独的专用线程。
现在,我预见到的问题是,由于只有一个套接字,即用于通信的单线,如果服务器和客户端同时发送数据,则有可能发生数据冲突。
遇到这种情况应该怎么办?
等待回复:(
当您使用 TCP 或 IP 通过 IP 发送消息时,端点会跟踪所谓的 5 元组:源 IP、目标 IP、源端口、目标端口和协议(protocol)(在本例中为 udp)。
如果您在A 和B 之间发送消息,那么来自A 的消息将具有A的源IP em> 和 B 的目的地 B 将相反。这样就可以区分数据包来自哪个方向,并在网络中交叉。这个词,数据包,很重要。
UDP 消息不像典型的 POTS 电话对话,在这种情况下,双方有效地在他们之间建立了一条线路,供他们使用。 UDP 消息更像是蜗牛邮件中的字母,其中每个字母都称为一个数据包。它们可以在网络上交叉路径,这很好。
网络堆栈在 A 或 B 处使用 5 元组来确定哪个用户空间套接字应该接收数据,不会混淆哪个目的地是特定的数据应该去。如果您确实需要等待,您的连接速度将非常低,并且一个完整的往返行程至少需要 10 毫秒,并且一个数据包几乎总是小于 2k。