如何在多线程方面从多个套接字接收数据

本文关键字:套接字 数据 多线程 方面 | 更新日期: 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来等待几个套接字,并处理其中任何一个套接字上的传入数据。

在我看来,你应该为每个套接字使用一个新线程,因为如果你为所有套接字使用相同的线程,你只会得到一个流,那就是最先得到的流。