• 5095阅读
  • 7回复

[提问]关于Qt 网络服务类的问题 [复制链接]

上一主题 下一主题
离线snikeguo
 

只看楼主 倒序阅读 楼主  发表于: 2015-01-02
关键词: 问题线程网络
RT ,Qt的TCP通讯机制是这样的,客户端有个Tcpsocket对象client,服务器有个TcpServer对象server,server进行监听,当server类监听到有客户连接,就搞一个socket对象,与客户机进行交互,这没啥问题,问题是,假设当client主动断开连接的时候(比如死机,停电,正常关闭客户端等等情况),服务端的socket并不能发送有效的信号,来通知server客户机下线。之前我连接过disconnected信号,但是发现当client断开的时候,这个信号并不发送,为此我想到了心跳,不过我设计的是,多客户端连接一个服务器,假设有N个客户端的话,我设计心跳可能需要N个定时器,或者N个线程,这并不靠谱,请教大家,这个问题如何解决??
离线gjk576238725

只看该作者 1楼 发表于: 2015-01-02
这个问题是不是一定要知道每个客户端在线,如果掉线的会造成大的损失,如果不会造成的不理会也没事,也不是每一个客户端多像断线这中情况。
  如果例会的话我觉得做一个定时器,定时发心跳信息给n个客户端是没问题.
想冒昧的说一下,在tcp底层有心跳检测机制,是不是我们还没有找到调用的api
离线snikeguo

只看该作者 2楼 发表于: 2015-01-02
回 gjk576238725 的帖子
gjk576238725:这个问题是不是一定要知道每个客户端在线,如果掉线的会造成大的损失,如果不会造成的不理会也没事,也不是每一个客户端多像断线这中情况。
  如果例会的话我觉得做一个定时器,定时发心跳信息给n个客户端是没问题.
想冒昧的说一下,在tcp底层有心跳检测机制,是不是我 .. (2015-01-02 20:19) 

不知道你有没有玩过灰鸽子,当客户端不论正常非正常下线的时候,服务器端就会提示“有主机下线,请注意。”这样的信息,这说明服务器端就有类似的心跳机制,我就是想搞这样,当下线 的时候 会提示。必须要知道在线客户机的信息。
离线snikeguo

只看该作者 3楼 发表于: 2015-01-03
问题解决了。哎,是我粗心了,我是来一个连接,就开辟一个线程,然后将这个socket movetothread到这个线程中,但是呢,我少了一句 start  就是没有启动这个线程,哎,之前吧,我也封装过这个网络类,是我太粗心了,搞了两天.....
离线snikeguo

只看该作者 4楼 发表于: 2015-01-03
回 gjk576238725 的帖子
gjk576238725:这个问题是不是一定要知道每个客户端在线,如果掉线的会造成大的损失,如果不会造成的不理会也没事,也不是每一个客户端多像断线这中情况。
  如果例会的话我觉得做一个定时器,定时发心跳信息给n个客户端是没问题.
想冒昧的说一下,在tcp底层有心跳检测机制,是不是我 .. (2015-01-02 20:19) 

问题解决了。哎,是我粗心了,我是来一个连接,就开辟一个线程,然后将这个socket movetothread到这个线程中,但是呢,我少了一句 start  就是没有启动这个线程,哎,之前吧,我也封装过这个网络类,是我太粗心了,搞了两天.....
离线圣域天子

只看该作者 5楼 发表于: 2015-01-04
回 snikeguo 的帖子
snikeguo:问题解决了。哎,是我粗心了,我是来一个连接,就开辟一个线程,然后将这个socket movetothread到这个线程中,但是呢,我少了一句 start  就是没有启动这个线程,哎,之前吧,我也封装过这个网络类,是我太粗心了,搞了两天..... (2015-01-03 00:23) 

你解决了什么?
心跳?
信号?
离线snikeguo

只看该作者 6楼 发表于: 2015-01-18
回 圣域天子 的帖子
圣域天子:你解决了什么?
心跳?
信号?
 (2015-01-04 12:47) 

QTcpsocket自带心跳机制,会发送信号。
离线渡世白玉

只看该作者 7楼 发表于: 2015-01-19
因为网络问题Qt的tcpsocket,不管是那端主动断开,或者非法断开,都会发送信号的、、
你仔细看下哪儿没捕捉好吧、、、
快速回复
限100 字节
 
上一个 下一个