新浪微博
腾讯微博
会员列表
统计排行
基本信息
到访IP统计
管理团队
管理统计
在线会员
会员排行
版块排行
帖子排行
标签排行
帮助
下拉
用户名
电子邮箱
用户名
密 码
记住登录
登录
找回密码
注册
快捷通道
关闭
您还没有登录,快捷通道只有在登录后才能使用。
立即登录
还没有帐号? 赶紧
注册一个
首页
论坛
Qt下载
作品展
群组
个人中心
捐赠、管理与开发
邮件订阅
帖子
文章
日志
用户
版块
群组
帖子
搜索
QTCN开发网
>
Qt代码秀
>
QtTcpServer多线程实现,更新,线程可控
发帖
回复
返回列表
新帖
14043
阅读
6
回复
QtTcpServer多线程实现,更新,线程可控
[复制链接]
上一主题
下一主题
离线
渡世白玉
UID:129774
注册时间
2012-04-01
最后登录
2019-11-19
在线时间
253小时
发帖
225
搜Ta的帖子
精华
4
金钱
2351
威望
243
贡献值
2
好评度
233
访问TA的空间
加好友
用道具
论坛版主
关闭
个人中心可以申请新版勋章哦
立即申请
知道了
加关注
发消息
只看楼主
倒序阅读
楼主
发表于: 2013-09-18
关键词:
问题
没有
数据
C++
其他
参考:
http://www.qtcn.org/bbs/read-htm-tid-54890.html
移除其十六进制的发送和接受。
更新内容:
添加
线程
管理类,可以固定线程,或者固定每个线程处理的连接数、、、、、
继承
自QTcpServer,希望
多线程
处理Qtcpsocket。
代码基于Qt5和C++11,建议win下用mingw版Qt。
代码中的信号曹大多用Qt5的新语法,以便使用lambda表达式,
所以有很多lambda表达式的应用。
里面有大量的qDebug() <<“*”<<QThread::currentThreadId();语句,以便观察线程状态,
实际应用请注释掉。一些只是的测试代码,
实现时分别继承QTcpServer和QTcpScoket实现出自己需要的类。
继承QTcpServer为每个客户端连接时分配线程,并接受处理tcpScoket的信号和槽、、还有发送信息,储存连接信息等。
继承QTcpScoket为处理通信
数据
和增加信号的
参数
,以便和tcpServer更好的配合。
首先是继承并重写QTcpServer的incomingConnection函数去自己实现tcpsocket连接的建立和分配。
其文档的默认描述为:
This virtual function is called by QTcpServer when a new connection is available. The socketDescriptor argument is the native socket descriptor for the accepted connection.
The base implementation creates a QTcpSocket, sets the socket descriptor and then stores the QTcpSocket in an internal list of pending connections. Finally newConnection() is emitted.
Reimplement this function to alter the server’s behavior when a connection is available.
If this server is using QNetworkProxy then the socketDescriptor may
not
be usable with native socket functions, and should only be used with QTcpSocket::setSocketDescriptor().
Note: If you want to handle an incoming connection as a new QTcpSocket object in another thread you have to pass the socketDescriptor to the other thread and create the QTcpSocket object there and use its setSocketDescriptor() method.
译文(谷歌翻译和自己简单的更正):
当QTcpServer有一个新的连接时这个虚函数被调用。该socketDescriptor参数是用于接受连接的本地套接字描述符。
该函数会创建一个QTcpSocket,并设置套接字描述符为socketDescriptor,然后存储QTcpSocket在挂起连接的内部清单。最后newConnection()被发射。
重新实现这个函数来改变服务器的行为,当一个连接可用。
如果该服务器使用QNetworkProxy那么socketDescriptor可能无法与原生socket函数使用,并且只能用QTcpSocket:: setSocketDescriptor()中使用。
注意:如果你想处理在另一个线程一个新的QTcpSocket对象传入连接,您必须将socketDescriptor传递给
其他
线程,并创建了QTcpSocket对象存在并使用其setSocketDescriptor()方法。
所以我们必须先重写这个函数:
代码地址:
https://github.com/dushibaiyu/QtTcpThreadServer
完全描述:
http://www.dushibaiyu.com/2013/12/qtcpserver多线程实现.html
共
条评分
回复
举报
分享到
淘江湖
新浪
QQ微博
QQ空间
开心
人人
豆瓣
网易微博
百度
鲜果
白社会
飞信
离线
embeddedking
UID:146196
注册时间
2013-09-24
最后登录
2014-05-13
在线时间
3小时
发帖
11
搜Ta的帖子
精华
0
金钱
110
威望
21
贡献值
0
好评度
11
访问TA的空间
加好友
用道具
新手上路
加关注
发消息
只看该作者
1楼
发表于: 2013-09-24
楼主威武啊,这些有点高深啊,小弟有个简单的Qt问题想请教下,不知道有空没?
共
条评分
回复
举报
离线
渡世白玉
UID:129774
注册时间
2012-04-01
最后登录
2019-11-19
在线时间
253小时
发帖
225
搜Ta的帖子
精华
4
金钱
2351
威望
243
贡献值
2
好评度
233
访问TA的空间
加好友
用道具
论坛版主
加关注
发消息
只看该作者
2楼
发表于: 2013-09-27
回 1楼(embeddedking) 的帖子
是参照大牛的丰富下、、、
共
条评分
回复
举报
离线
chenjun0211
UID:84446
注册时间
2009-09-07
最后登录
2016-05-21
在线时间
56小时
发帖
19
搜Ta的帖子
精华
0
金钱
235
威望
29
贡献值
1
好评度
20
访问TA的空间
加好友
用道具
新手上路
加关注
发消息
只看该作者
3楼
发表于: 2013-10-01
”继承QThread来处理QTcpSocket,只有Run()中的是在新的子线程中运行“ 这个问题你要仔细阅读Qt的文档或者csdn上面专门有说Qt多线程的处理,其中说的是只有run()为开启一个子线程,其他的类函数都是主线程中处理,所以你你的发送和接受等操作需要使用类实现后在run()中实例化那个处理类并exec()后所有的操作就会在新的线程中运行了
共
条评分
回复
举报
离线
渡世白玉
UID:129774
注册时间
2012-04-01
最后登录
2019-11-19
在线时间
253小时
发帖
225
搜Ta的帖子
精华
4
金钱
2351
威望
243
贡献值
2
好评度
233
访问TA的空间
加好友
用道具
论坛版主
加关注
发消息
只看该作者
4楼
发表于: 2014-01-18
添加线程管理类,可以固定线程,或者固定每个线程处理的连接数、、、、、
主线程只负责建立新连接和维护连接线程、、
每个Socket的处理都在各自的线程、、
共
4
条评分
,
好评度
+1
,
贡献值
+1
,
金钱
+1
,
威望
+1
燕子飞时
好评度
+1
-
2019-09-26
燕子飞时
贡献值
+1
-
2019-09-26
燕子飞时
威望
+1
-
2019-09-26
燕子飞时
金钱
+1
-
2019-09-26
回复
举报
离线
nigoole
UID:144078
注册时间
2013-05-24
最后登录
2025-04-26
在线时间
2199小时
发帖
677
搜Ta的帖子
精华
0
金钱
6905
威望
697
贡献值
10
好评度
686
访问TA的空间
加好友
用道具
圣骑士
加关注
发消息
只看该作者
5楼
发表于: 2014-02-17
共
条评分
有句话说得好:好好学习,天天向上。加油~~!有上船的朋友联系企鹅393320854
回复
举报
离线
shijiegong
UID:175769
注册时间
2016-09-22
最后登录
2018-07-29
在线时间
1小时
发帖
3
搜Ta的帖子
精华
0
金钱
40
威望
13
贡献值
0
好评度
3
访问TA的空间
加好友
用道具
新手上路
加关注
发消息
只看该作者
6楼
发表于: 2016-09-22
学习学习,多谢楼主!
共
条评分
回复
举报
发帖
回复
返回列表
http://www.qtcn.org/bbs
访问内容超出本站范围,不能确定是否安全
继续访问
取消访问
快速回复
限100 字节
您目前还是游客,请
登录
或
注册
进入高级模式
文字颜色
发 布
回复后跳转到最后一页
上一个
下一个
关闭
补充发布信息
验证码:
发 布
隐藏
快速跳转
站务及资讯
网站公告
新闻资讯
Qt官方发布
网站管理
Qt应用及资源
Qt 作品展
Qt代码秀
Qt应用版
Qt技术讨论区
Qt安装与发布
Qt中文处理
Qt基础编程
Qt QML开发
Qt嵌入式开发
Qt移动平台开发
其它技术开发讨论区
Qt图书专区
《C++ GUI Qt 4编程》(第2版)专栏
《Qt高级编程》专栏
《零基础学Qt4编程》专栏
《Qt设计模式》(第2版) 图书专栏
Python Qt GUI快速编程
Qt项目开发区
天池项目
Qt开放平台开发库
机械CAD
扇贝词典
非活跃项目区
社区中心
帖子回收站(Trash)
招聘、求职、供求、广告等
休闲娱乐
关闭
关闭
选中
1
篇
全选