C#中的UDP套接字?
如果socket.ReceiveFrom (byte [] message, EndPoint endPoint)
用于在绑定的UDP套接字上接收数据,并且没有收到数据会发生什么情况?它是否继续等待数据到达或继续?我特别谈论UDP数据报。C#中的UDP套接字?
如果目标是迫使你的插座停止后X号听秒,所以你可以做别的事情(比如检查应用程序是否正在关闭),并且你正在使用同步套接字,那么我会建议将Socket.ReceiveTimeout
设置为X秒数(因为Socket.ReceiveTimeout
以毫秒为单位的时间数为1000),然后捕获造成超时时引发的异常。
它会等待数据。如果这种行为不够好,可以使用异步接收。也使用UDPClient。不需要使用Socket本身。
如果没有数据可用于阅读,ReceiveFrom方法将阻塞,直到数据可用
来源:http://msdn.microsoft.com/en-us/library/aa329728%28v=vs.71%29.aspx
-1:如果您不推荐'UDPClient',不知道它们是什么?绝对有些情况下,你可以使用自己的'Socket'。 – 2011-12-31 05:23:57
我不是说每件事都使用UDPClient。如果你需要的话,最好用Socket连接UDP。 – 2011-12-31 05:25:52
从http://msdn.microsoft.com/zh-cn/library/system.net.sockets.socket.receivetimeout.aspx:此选项仅适用于同步接收呼叫。如果超时超时,Receive方法将抛出一个SocketException.'所以不管你的回答是不正确的。 – 2011-12-31 05:28:23
有一个超时选项:'Socket.ReceiveTimeout',例如:'socket.ReceiveTimeout = 1000;' – 2011-12-31 05:22:43
@ M.Babcock感谢您的回答。所以我需要基本上设置接收超时 - 如果超过超时它会自动继续?那是对的吗?你确定这也适用于UDP套接字吗? – fdh 2011-12-31 05:32:36
如果超时过期,则不会产生您需要处理的异常。我在使用套接字异步时(这可能是由我在接收时进行的大量工作导致的)导致数据包丢失,所以在我的情况下,我必须实现超时并以超时的方式同步处理请求,以终止侦听线程。你的里程我有所不同。 – 2011-12-31 05:42:30