C# 如何在UdpClient中终止侦听器
我有一个UDP库,它在.NET4.x中运行良好,但我正在尝试将其移植到.NETCore,以便与ASP.NETCore MVC站点一起使用。站点通过第三方“服务器”从传感器发送和接收UDP数据报。带有“服务器”的UDP协议是固定的,因此连接的套接字不是选项 UDP侦听器将在用户登录时启动,在没有更多用户时停止。我的问题是,显然在核心中只有ReceiveAsync可用(BeginReceive/EndReceive已经消失),如何终止接收循环 就我所见,对ReceiveAsync的调用仅在收到数据报时返回。因此,除了站点向自身发送终止数据报之外,我看不出如何中断该过程C# 如何在UdpClient中终止侦听器,c#,asp.net,.net-core,udp,C#,Asp.net,.net Core,Udp,我有一个UDP库,它在.NET4.x中运行良好,但我正在尝试将其移植到.NETCore,以便与ASP.NETCore MVC站点一起使用。站点通过第三方“服务器”从传感器发送和接收UDP数据报。带有“服务器”的UDP协议是固定的,因此连接的套接字不是选项 UDP侦听器将在用户登录时启动,在没有更多用户时停止。我的问题是,显然在核心中只有ReceiveAsync可用(BeginReceive/EndReceive已经消失),如何终止接收循环 就我所见,对ReceiveAsync的调用仅在收到数据报
有什么建议吗?也许这可以帮助您:
socket.Dispose()
,当您关闭套接字时,ReceiveAsync将执行回调,e.ByTestTransfered
将为0,e.SocketError
将不会SocketError.Success
我不明白您在问什么。即使在使用BeginReceive()
/EndReceive()
时,也有一个“循环”。它只是没有嵌入到一个方法中。你仍然有如何中断循环的问题。然后答案仍然是您必须关闭套接字,这将导致接收操作在异常情况下完成(即,当您调用EndReceive()
时,将引发异常)。ReceiveAsync()
完全相同;您现在只需将所有代码放入一个方法中。什么对您不起作用?Peter,当然区别在于BeginReceive()立即返回,并且有机会在检查取消的循环或回调中调用EndReceive()。ReceiveAsync()会在收到数据报之前阻塞该执行路径,因此任何取消都必须以某种方式从单独的线程执行。