相关疑难解决方法(0)

如何在C#中检查(dis)连接(TCP)套接字?

我应该如何检查(TCP)套接字以确定它是否已连接?

我已经阅读了MSDN中Socket.Connected属性,但它说它只根据最后一个I/O显示状态.这对我没用,因为我想尝试从套接字读取之前这样做.备注部分还指出:

如果需要确定连接的当前状态,请进行非阻塞,零字节发送调用.如果调用成功返回或抛出WAEWOULDBLOCK错误代码(10035),则套接字仍然连接; 否则,套接字不再连接.

同一页面上的示例显示了如何执行此操作.(1)Ian Griffiths的帖子说我应该从套接字读取,而不是通过它发送.

Pete Duniho的另一篇文章说:

...在你打电话之后Shutdown(),打电话Receive()直到它返回0 (假设远程端点实际上不会向你发送任何东西,一旦远程端点收到你的所有数据就会发生这种情况).除非您这样做,否则您无法保证远程端点实际上已收到您发送的所有数据,即使使用延迟套接字也是如此.

我真的不明白他关于调用Receive()以确保远程端点实际上已经收到我发送的所有数据的说法.(套接字阻塞接收,直到发送缓冲区为空?)

我对提出的不同方法感到困惑.你能解释一下吗?


(1)但不知为何,例如Socket.Connected属性分配1字节的数组,即使它调用Send与0长度?

.net sockets

34
推荐指数
2
解决办法
3万
查看次数

标签 统计

.net ×1

sockets ×1