UDP,多线程多个客户端?

时间:2018-11-20 07:21:38

标签: multithreading sockets udp

我正在研究UDP客户端-服务器体系结构,其中服务器(自然地)可以处理多个客户端。但是我遇到了一些问题。我目前有一个“服务器”,它接受来自IPAddress.Any的1个套接字的数据。如果它是未知IP,则会创建一个新的客户端实例,并且所有相关数据都将保存在那里。

现在这是我遇到的问题。当尝试在“服务器”和“客户端”上都开始BeginReceiveFrom时,所有数据都会被接收两次,因此自然这不是很有用。 在接收数据后(但在解析,检查等之前)立即重新启动BeginReceiveFrom时,数据以随机顺序出现,有时会丢失数据。 (我在本地连接,所以我怀疑UDP会丢失那么频繁的数据包)。

使用类似的TCP体系结构,您可以在每个新客户端上运行BeginReceiveFrom,而不会出现问题。这里有什么不同? TCP堆栈如何处理将数据分发给所有连接的客户端?

如何实现类似的功能(或者至少要多于一个线程)?必须运行一个线程进行(例如1.000个)连接,并且必须在处理一个新数据包之前解析/处理每个数据包,这会导致性能大幅下降。

解析和“传递”数据到每个客户端,并让每个客户端有1个线程来拾取和处理数据是一种主意吗?

我知道人们通常希望看到一些代码来提供更好的帮助,但是在这种情况下,我认为这不会有太大帮助(请问我是否可以提供,我可以提供一些帮助)。

我当前的解决方案是BeginReceiveFrom> EndReceiveFrom>解析数据>检查数据> BeginReceiveFrom>等。

UDP是可选的。

0 个答案:

没有答案