如何在多线程方面从多个套接字接收数据
本文关键字:套接字 数据 多线程 方面 | 更新日期: 2023-09-27 18:28:09
我想重新表述我之前的问题;新线程";用";任务.工厂.开始新的"?
我需要监听几个udp套接字
................
s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
........
public void Receive()
{
byte[] buffer = new byte[65536];
while (true)
{
try
{
count = s.Receive(buffer);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
return;
}
if (count > 0)
{
OnNewDatagram(new NewDatagramEventArgs(buffer, count));
}
}
}
因此,我需要启动几个"Receive()"方法(每个套接字一个)。现在我使用一个线程作为一个套接字:
socketA = new...
....
threadA = new Thread(Receive);
.....
threadA.Start();
socketB = new...
....
threadB = new Thread(Receive);
.....
threadB.Start();
我应该使用什么:
- 一个插座一个螺纹
- 一个线程用于所有套接字(如何?)
- 一个任务用于所有套接字
- 一个套接字一个任务
- 其他
upd我只有2-3个套接字,所以最好使用一个套接字-一个线程模型,而不是套接字。选择…还是一个套接字一个任务模型?
您应该使用Socket.Select
来等待几个套接字,并处理其中任何一个套接字上的传入数据。
在我看来,你应该为每个套接字使用一个新线程,因为如果你为所有套接字使用相同的线程,你只会得到一个流,那就是最先得到的流。