首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

socket 通信有关问题

2012-11-10 
socket 通信问题问题:简单说就是定时检测 socket连接状态我现在用的是BCB中自带的 TClientSocket 控件,作

socket 通信问题
问题:简单说就是定时检测 socket连接状态
  我现在用的是BCB中自带的 TClientSocket 控件,作为客户端, 服务器是一单片机。
  程序启动,在配置文件中读取ip地址和端口号,连接服务器,若连接不成功则继续连接
  连接成功则可以向服务器发送命令,服务器收到命令返回数据。
  问题出在,如果连接成功,如果不给服务起发送命令,过一段时间(时间不定),socket会自动断开连接,但我这里检测测到已经断开,没有激发socket的任何事件,直到我给服务器发送命令,才发现断开了(偶尔会间隔很长一段时间检测到断开),这个该如何解决。  
  还有就是socket如何检测例如像拔掉网线这样的断开?

[解决办法]
最好发心跳包避免超时断开。
2有个断开事件可以检测
[解决办法]
发送之前判断一下链接是否有效,如果无效则进行重新链接,心跳包必须有,另外你可以试试indy控件,这个比较稳定。
[解决办法]
既然要求这么多,为什么还用控件,自己编好了。
[解决办法]
可以通过下面方法检查:
1. 服务器掉线时,如果正常发送了关闭信息,客户端应该收到 CLOSE 消息;
2. 客户端主动发心跳,如果服务器掉线,会收到CLOSE,对方发RESET信息。

你可以参考《WinSock网络编程经络》这本书,论坛上有源码:
http://download.csdn.net/detail/geoff08zhang/4571358

热点排行