socket 通信问题
问题:简单说就是定时检测 socket连接状态
我现在用的是BCB中自带的 TClientSocket 控件,作为客户端, 服务器是一单片机。
程序启动,在配置文件中读取ip地址和端口号,连接服务器,若连接不成功则继续连接
连接成功则可以向服务器发送命令,服务器收到命令返回数据。
问题出在,如果连接成功,如果不给服务起发送命令,过一段时间(时间不定),socket会自动断开连接,但我这里检测测到已经断开,没有激发socket的任何事件,直到我给服务器发送命令,才发现断开了(偶尔会间隔很长一段时间检测到断开),这个该如何解决。
还有就是socket如何检测例如像拔掉网线这样的断开?
[解决办法]
最好发心跳包避免超时断开。
2有个断开事件可以检测
[解决办法]
发送之前判断一下链接是否有效,如果无效则进行重新链接,心跳包必须有,另外你可以试试indy控件,这个比较稳定。
[解决办法]
既然要求这么多,为什么还用控件,自己编好了。
[解决办法]
可以通过下面方法检查:
1. 服务器掉线时,如果正常发送了关闭信息,客户端应该收到 CLOSE 消息;
2. 客户端主动发心跳,如果服务器掉线,会收到CLOSE,对方发RESET信息。
你可以参考《WinSock网络编程经络》这本书,论坛上有源码:
http://download.csdn.net/detail/geoff08zhang/4571358