TClientSocket如何得知服務器端已經關閉了

xkf1119 2017-03-25 11:56:17
網上大多數問的都是服務器端如何得知客戶端是否斷開連接,我想問的是客戶端再正常連線服務器端的情況下,如果服務器端突然關閉了,客戶端要如何馬上得知?
...全文
905 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
trainbox 2017-06-01
  • 打赏
  • 举报
回复
不是有个OnDisconnect事件吗
xkf1119 2017-03-27
  • 打赏
  • 举报
回复
我用的以下連接中的iocp直接當Serve端,然後自己使用TClientSocket寫了個Client端,當Client端Connect成功後,手動把Server端Close掉,這個時候測試Client 發送Sendtext並不會報錯,只是不會自動進入ClientSocket1Read事件中去,這樣的情況好像心跳包是無效的. http://bbs.csdn.net/topics/310161873
lyhoo163 2017-03-27
  • 打赏
  • 举报
回复
引用 4 楼 xkf1119 的回复:
現在想了個笨辦法,再放個ClientSocket控件,然後用Timer沒秒關閉再連接Server,如果失敗,則代表Server可能關閉了
这就是简单的心跳。
xkf1119 2017-03-27
  • 打赏
  • 举报
回复
再次測試發現一個新的差異點,原來測試ClientSocket連上iocp服務器後,執行ClientSocket1.Socket.SendText('S6F11-Text')函數返回值是10,如果這個時候手動按下IOCP執行檔上的Close按鈕,再去測試ClientSocket1.Socket.SendText('S6F11-Text')函數返回值還是10,並且ClientSocket1Read和ClientSocket1Error都沒有捕獲到任何訊息. 但是我剛才測試直接把IOCP執行檔關了,2秒後ClientSocket1Error就捕獲到錯誤訊息了,並且這個時候測試ClientSocket1.Socket.SendText('S6F11-Text')函數返回值還是30824808. 所以可能是IOCP端 Close程式的問題,不過這個程式我是直接下載的別人的,不太懂....
Mr Dang 2017-03-27
  • 打赏
  • 举报
回复
clientSocket.sendtext ('123')的返回值也是3 ?
xkf1119 2017-03-27
  • 打赏
  • 举报
回复
現在想了個笨辦法,再放個ClientSocket控件,然後用Timer沒秒關閉再連接Server,如果失敗,則代表Server可能關閉了
Mr Dang 2017-03-26
  • 打赏
  • 举报
回复
没遇到过这种应用场景,如果不触发断开事件,周期clientSocket.sendtext随意字符会报错,补获异常,这就是心跳
lyhoo163 2017-03-25
  • 打赏
  • 举报
回复
通过客户端心跳,向服务器发送信息。

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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