我正在创建一个应用程序,它将通过udp数据包发送和接收大量数据。我希望能够通过添加或减少更多工作线程来扩展对这些请求的处理。但是,当我添加第二个线程并开始等待数据时,出现以下错误。
“每个套接字地址(协议/网络地址/端口)通常只允许使用一种”
代码:
static void Main(string[] args)
{
Console.WriteLine("Running...");
Thread threadA = new Thread(new ThreadStart(ProcessMessage));
Thread threadB = new Thread(new ThreadStart(ProcessMessage));
threadA.Start();
threadB.Start();
Console.WriteLine("Press any key.");
Console.ReadLine();
}
private static void ProcessMessage()
{
using (var udpClient = new UdpClient(11000))
{
var sender = new System.Net.IPEndPoint(IPAddress.Any, 11000);
var data = udpClient.Receive(ref sender);
// Do work
}
}
错误非常清楚,但是我的问题是:如何正确地在多个线程之间分配工作?
感谢您的帮助,对于任何拼写错误,我们深表歉意。 我不是说英语的人。
答案 0 :(得分:0)
冈萨雷斯(C.Gonzalez)的评论非常有帮助,因此我将其作为正确答案。
处理大量UDP的通常方法是让一个线程尽可能快地消耗数据(并将消息的内容放入队列中)。 (任何适度的新硬件都可以像网络发送数据一样快地接收数据)一个或多个其他线程清空并处理数据。如果需要响应,可以将其放入传出队列中,以便另一个专用线程将消息发送出去(您可以使用与此专用线程相同的套接字)。同样,任何相对较新的硬件都可以轻松地以线速发送和接收双工模式。