【发布时间】:2012-01-30 23:14:32
【问题描述】:
如果socket.ReceiveFrom (byte [] message, EndPoint endPoint) 用于在绑定的 UDP 套接字上接收数据,但没有接收到数据,会发生什么?它是继续等待数据到达还是继续?我说的是 UDP 数据报。
【问题讨论】:
-
有一个超时选项:
Socket.ReceiveTimeout,例如:socket.ReceiveTimeout = 1000; -
@M.Babcock 感谢您的回答。所以我需要基本上设置接收超时 - 如果它超过超时它会自动移动?那是对的吗?你确定这也适用于 UDP 套接字吗?
-
否,如果超时到期,则会引发您需要处理的异常。我在使用套接字异步时遇到了丢包(这可能是由于我在接收时所做的大量工作造成的),所以在我的情况下,我必须实现超时并与超时同步处理请求以终止侦听线程。您的里程数因人而异。
-
您确定这适用于 UDP 套接字吗?因为您说“接收”是 TCP 而不是 UDP。这就是我基本上在做的事情:我听 10 秒钟的信息。如果我得到信息,我调用函数 a,但如果我没有,我调用函数 b。你知道我会怎么做吗?我可以将 ReceiveTimeout 设置为 10 秒,然后调用 ReceiveFrom() 吗?
-
接收适用于 TCP 和 UDP,它是使用 UDP 时丢失的连接。