c++builder-C++ Builder心跳包的问题

问题描述

C++ Builder心跳包的问题

大家好,小弟最近在研究DataSnap服务器心跳包的问题
我用的是TDSTCPServerTransport控件 客户端用TSQLConnection连接
看网上的帖子说只需要在TDSTCPServerTransport中设置心跳属性就可以了

当客户端没有网络异常时,服务器会在超时后触发心跳,结束后为触发TDSTCPServerTransport的DSTCPServerTransportDisconnect事件。
但是我在客户端断开网络之后,服务器一直等不到Disconnect事件是为什么呢。是不是还有其他地方要设置?我的客户端是直接设置好TSQLConnection的Driver属性后Open(), 成功后不主动断开,然后断开网络来模拟网络异常。有大虾帮帮忙看看么?

解决方案

C++ Builder 问题求教

解决方案二:

tcp通信的send事件,失败会有异常返回。可以自己写个心跳包机制。

时间: 2024-08-04 13:57:58

c++builder-C++ Builder心跳包的问题的相关文章

tcp连接探测Keepalive和心跳包

采用TCP连接的C/S模式软件,连接的双方在连接空闲状态时,如果任意一方意外崩溃.当机.网线断开或路由器故障,另一方无法得知TCP连接已经失效,除非继续在此连接上发送数据导致错误返回.很多时候,这不是我们需要的.我们希望服务器端和客户端都能及时有效地检测到连接失效,然后优雅地完成一些清理工作并把错误报告给用户. 如何及时有效地检测到一方的非正常断开,一直有两种技术可以运用.一种是由TCP协议层实现的Keepalive,另一种是由应用层自己实现的心跳包. TCP默认并不开启Keepalive功能,

心跳包机制

心跳包之所以叫心跳包是因为:它像心跳一样每隔固定时间发一次,以此来告诉服务器,这个客户端还活着.事实上这是为了保持长连接,至于这个包的内容,是没有什么特别规定的,不过一般都是很小的包,或者只包含包头的一个空包. 在TCP的机制里面,本身是存在有心跳包的机制的,也就是TCP的选项:SO_KEEPALIVE.系统默认是设置的2小时的心跳频率.但是它检查不到机器断电.网线拔出.防火墙这些断线.而且逻辑层处理断线可能也不是那么好处理.一般,如果只是用于保活还是可以的. 心跳包一般来说都是在逻辑层发送空的

ios后台运行-iOS中,微信在退出后,是否会一直给服务器发送心跳包?

问题描述 iOS中,微信在退出后,是否会一直给服务器发送心跳包? 我在iphone手机的设置中心关掉了微信的通知.但是微信实际上还是可以收到消息.只是手机上没有声音,横幅提醒.所以我猜测:1)微信的消息接受不是推送机制实现的:2)微信在退出后,实际上会一直给服务器发送心跳包.要不然,微信不可能立刻收到消息.不知道我的理解对不对?

java 路由器心跳包-java中怎么接收服务器传过来的json呢?谢谢大家

问题描述 java中怎么接收服务器传过来的json呢?谢谢大家 最近最到了一个关于路由器心跳包,需要用java实现,在取值方面,路由器传过来的是一串json { "gwmac":"c8:3a:35:29:bc:80","gwaddr":"192.168.1.10","gwport":"8080","usrnum":"0", "versio

TCP连接探测中的Keepalive和心跳包. 关键字: tcp keepalive, 心跳, 保活

1. TCP保活的必要性 1) 很多防火墙等对于空闲socket自动关闭 2) 对于非正常断开, 服务器并不能检测到. 为了回收资源, 必须提供一种检测机制.   2. 导致TCP断连的因素 如果网络正常, socket也通过close操作来进行优雅的关闭, 那么一切完美. 可是有很多情况, 比如网线故障, 客户端一侧突然断电或者崩溃等等, 这些情况server并不能正常检测到连接的断开.    3. 保活的两种方式: 1) 应用层面的心跳机制 自定义心跳消息头. 一般客户端主动发送, 服务器接

心跳包中怎样加测试代码?

问题描述 我做的是客户机向主机发送心跳包,想在心跳包中加个特殊校验位,当主机接收到包后分析校验位判断客户端的情况.

TCP连接探测中的Keepalive 和心跳包

采用TCP连接的C/S模式软件,连接的双方在连接空闲状态时,如果任意一方意外崩溃.当机.网线断开或路由器故障,另一方无法得知TCP连接已经失效,除非继续在此连接上发送数据导致错误返回.很多时候,这不是我们需要的.我们希望服务器端和客户端都能及时有效地检测到连接失效,然后优雅地完成一些清理工作并把错误报告给用户. 如何及时有效地检测到一方的非正常断开,一直有两种技术可以运用.一种是由TCP协议层实现的Keepalive,另一种是由应用层自己实现的心跳包. TCP默认并不开启Keepalive功能,

为什么基于TCP的应用需要心跳包(TCP keep-alive原理分析)

TCP keep-alive的三个参数 用man命令,可以查看linux的tcp的参数: man 7 tcp 其中keep-alive相关的参数有三个: tcp_keepalive_intvl (integer; default: 75; since Linux 2.4) The number of seconds between TCP keep-alive probes. tcp_keepalive_probes (integer; default: 9; since Linux 2.2)

mina 2 心跳包

接收到心跳后先解码,先不调用经过messageReceived()方法,先触发心跳接收发送类KeepAliveMessageFactoryImpl中的isRequest()方法,当判断是心跳时,就会发一个心跳,不再调用messageReceived(),当判断不是心跳时,回调messageReceived()方法,输出内容. //服务器 import java.io.IOException; import java.net.InetSocketAddress; import java.nio.c