【问题标题】:How to make UdpClient non blocking如何使 UdpClient 非阻塞
【发布时间】:2019-03-07 17:33:28
【问题描述】:

我是 Socket 编程和 C# 的新手。我正在尝试创建一个我正在使用 UdpClient 的应用程序。

但即使套接字上有数据,但有时Receive function 没有收到任何数据并进入阻塞状态。 只是为了防止这种情况发生阻塞,我使用了一个计数器。 接收函数在线程中。

main function 我创建了一个计数器

int count = 0;
bool ret = IsDataReceived();
while(!ret && count < 30)
{
  ret = IsDataReceived();
  count++;
}

if(count>= 30)
{
thread.abort();

udpclient.close();
}
else
{
Console.WriteLine("Data Received");
}

我现在正在这样做,但我想知道如何使UdpClient 成为非阻塞的。

提前致谢。

【问题讨论】:

  • 从不使用Thread.Abort 方法。它仅适用于特殊情况。如果你不知道这些情况,那你肯定不需要Thread.Abort
  • @dymanoid 好的先生,但我没有找到其他方法

标签: c# multithreading sockets udp udpclient


【解决方案1】:

如果你正在使用,我不知道你的函数 IsDataReceive 是如何编写的:

UdpClient.Receive

此操作阻塞,直到套接字返回消息

如果您不想进行阻塞操作,可以使用:

UdpClient.ReceiveAsync

【讨论】:

猜你喜欢
  • 2014-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多