如何正确的切断网络联接(SDK)?

songyangk 2003-04-14 10:37:29
我用SDK编写了一个TCP/IP的通讯组件,服务端与客户端联接后通过另起一个线程(线程里循环调用recv方法)来接收对方的信息,但当客户端断开联接时应该用什么样的方法才能使用服务端收到正确的客户端已断开的消息呢?
我使用过disconnect方法或停止线程的方法,服务端收到的都是一个联接异常中止的错误信息,而不是正确的联接为开的信息。
请各位高手赐教!!
...全文
93 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
雪狼__ 2003-04-14
  • 打赏
  • 举报
回复
关注中
songyangk 2003-04-14
  • 打赏
  • 举报
回复
搞定!在关闭的时候使用了以下方法,shutdown通过socket内部机制发送了结束的消息,再closesocket就可以得到正确的关闭联接结果了。

WSAAsyncSelect(paramc.conn_socket, NULL, NULL, FD_CLOSE);
shutdown(paramc.conn_socket, SD_BOTH);

谢谢以上几位朋友的帮忙。
songyangk 2003-04-14
  • 打赏
  • 举报
回复
但如果这样的话,我就不能判断出客户端是正常断开还是因为网络故障了!
求助中。。。
liuwei662656 2003-04-14
  • 打赏
  • 举报
回复
对,

应该如此。

网络中对于是否断开 不应光使用消息判断, 容易出问题。

一个笨方法, 但有效: 隔一段时间发 "test" 过去, 如果能正常发, 则连接正常。
rtdb 2003-04-14
  • 打赏
  • 举报
回复
由于硬件原因(例如网络中断或CLIENT死机)也可以导致联接丢失,
而此时服务器端可以不会收到任何信息。
所以建议服务器做超时检查。

这样能否收到“正确的联接为开的信息”就不重要了。



18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧