【发布时间】:2010-10-05 15:40:44
【问题描述】:
我应该如何检查 (TCP) 套接字以确定它是否已连接?
我在MSDN 中阅读了有关Socket.Connected 属性的信息,但它说它只根据最后一次I/O 显示状态。这对我没有用,因为我想在尝试从套接字读取数据之前执行此操作。备注部分还指出:
如果需要确定当前 连接状态,做一个 非阻塞、零字节发送调用。如果 呼叫成功返回或 抛出 WAEWOULDBLOCK 错误代码 (10035),那么套接字仍然 连接的;否则,套接字为否 连接时间更长。
同一页面上的示例显示了如何做到这一点。(1) 但是a post by Ian Griffiths 说我应该从套接字读取,而不是发送 通过它。
Another post by Pete Duniho 说:
...在您致电
Shutdown()之后, 调用Receive(),直到它返回0(假设远程端点不是 实际上会寄给你任何东西, 这将在遥控器发生后立即发生 端点已收到您的所有 数据)。除非你这样做,否则你有 不保证远程端点 实际上已经收到了所有的数据 你发送了,即使使用了挥之不去的 插座。
我不太明白他关于调用Receive() 以确保远程端点确实收到了我发送的所有数据的说法。 (在发送缓冲区为空之前,套接字会阻塞接收吗?)
我对提出的不同方法感到困惑。你能解释一下吗?
(1) 我想知道为什么Socket.Connected 属性的example 分配一个1 字节的数组,即使它以0 长度调用Send?
【问题讨论】:
-
检查此链接...最后您可以找到该stackoverflow.com/questions/1387459/…的程序