如何使 UdpClient 非阻塞
Posted
技术标签:
【中文标题】如何使 UdpClient 非阻塞【英文标题】:How to make UdpClient non blocking 【发布时间】: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
成为非阻塞的。
提前致谢。
【问题讨论】:
C# UDP Socket client and server的可能重复 从不使用Thread.Abort
方法。它仅适用于特殊情况。如果你不知道这些情况,那你肯定不需要Thread.Abort
。
@dymanoid 好的先生,但我没有找到其他方法
【参考方案1】:
如果你正在使用,我不知道你的函数 IsDataReceive 是如何编写的:
UdpClient.Receive
此操作阻塞,直到套接字返回消息
如果您不想进行阻塞操作,可以使用:
UdpClient.ReceiveAsync
【讨论】:
IsDataRecived 返回 bool 值,如果接收到的数据为真。您可以发布 ReceiveAsync 的示例代码 你有一个漂亮的样本:docs.microsoft.com/fr-fr/dotnet/framework/network-programming/… 如果您的原始问题已解决,请记住接受并投票,如果您有其他问题,请提出新问题:***.com/help/someone-answers以上是关于如何使 UdpClient 非阻塞的主要内容,如果未能解决你的问题,请参考以下文章
(显然)Gracefully Closed UDPClient 使套接字阻塞
如何使 Ignite 像使用 TcpDiscoveryMulticastIpFinder 一样使用 TcpDiscoveryVmIpFinder 进行非阻塞行为?