新浪微博
腾讯微博
会员列表
统计排行
基本信息
到访IP统计
管理团队
管理统计
在线会员
会员排行
版块排行
帖子排行
标签排行
帮助
下拉
用户名
电子邮箱
用户名
密 码
记住登录
登录
找回密码
注册
快捷通道
关闭
您还没有登录,快捷通道只有在登录后才能使用。
立即登录
还没有帐号? 赶紧
注册一个
首页
论坛
Qt下载
作品展
群组
个人中心
捐赠、管理与开发
邮件订阅
帖子
文章
日志
用户
版块
群组
帖子
搜索
QTCN开发网
>
Qt基础编程
>
tcp多线程服务器如何转发信息
发帖
回复
返回列表
新帖
9492
阅读
12
回复
[提问]
tcp多线程服务器如何转发信息
[复制链接]
上一主题
下一主题
离线
jsjs2001
UID:124673
注册时间
2011-11-20
最后登录
2012-09-06
在线时间
65小时
发帖
18
搜Ta的帖子
精华
0
金钱
178
威望
28
贡献值
0
好评度
18
访问TA的空间
加好友
用道具
新手上路
关闭
个人中心可以申请新版勋章哦
立即申请
知道了
加关注
发消息
只看楼主
倒序阅读
楼主
发表于: 2012-06-02
关键词:
QT4
求助
问题
线程
最近写
网络
聊天程序,写到了多
线程
服务器。服务器与每个连接的客户端都创建一个线程来处理客户端的请求(每个线程建立对应的QTcpSocket)。但现在出现
问题
是一个客户端给另一个客户端发信息的时候。服务器如何去转发这个信息呢???我试了写方法但都行不通,想要发信息只能调用接收信息客户端的线程中的QTcpSocket去发信息。这点怎么去实现呢??请各位大神指教
共
条评分
回复
举报
分享到
淘江湖
新浪
QQ微博
QQ空间
开心
人人
豆瓣
网易微博
百度
鲜果
白社会
飞信
离线
xie133
UID:131601
注册时间
2012-05-11
最后登录
2012-09-28
在线时间
23小时
发帖
28
搜Ta的帖子
精华
0
金钱
280
威望
38
贡献值
0
好评度
28
访问TA的空间
加好友
用道具
新手上路
加关注
发消息
只看该作者
1楼
发表于: 2012-06-02
最好的办法是通过服务器获取对方公网IP以及端口,然后发送给你,你就可以直接对他通信,当然,如果有NAT墙这样肯定不行,需要服务器帮你窗墙,这个就复杂了,说也说不清。
通过服务器中转也是可以的,每个用户多有一个ID号,你可以每个主线程与次线程多关联一个槽,然后当发送信息过来的时候将信息丢给主线程,让他去找匹配的次线程,并将消息发送出去。不过用QT做服务端效果肯定不好,只能自己玩的时候用下。
共
条评分
回复
举报
离线
jsjs2001
UID:124673
注册时间
2011-11-20
最后登录
2012-09-06
在线时间
65小时
发帖
18
搜Ta的帖子
精华
0
金钱
178
威望
28
贡献值
0
好评度
18
访问TA的空间
加好友
用道具
新手上路
加关注
发消息
只看该作者
2楼
发表于: 2012-06-02
这种方法我试过了呢,建立了一个QMap。存储了描述符套接字和线程指针,但是发信号发现槽函数总是在主线程执行。蛮杯具的
共
条评分
回复
举报
离线
xie133
UID:131601
注册时间
2012-05-11
最后登录
2012-09-28
在线时间
23小时
发帖
28
搜Ta的帖子
精华
0
金钱
280
威望
38
贡献值
0
好评度
28
访问TA的空间
加好友
用道具
新手上路
加关注
发消息
只看该作者
3楼
发表于: 2012-06-02
当信号与槽不在同一个线程的时候,默认的连接方式确实会让槽函数在主线程执行,这样不好吗?信号会发送到队列中,也就是异步的过程。Qt::BlockingQueuedConnection你可以使用这种连接方式,次线程会堵塞在发送信号的那里,等到槽函数执行完再继续往下走。
共
条评分
回复
举报
离线
jsjs2001
UID:124673
注册时间
2011-11-20
最后登录
2012-09-06
在线时间
65小时
发帖
18
搜Ta的帖子
精华
0
金钱
178
威望
28
贡献值
0
好评度
18
访问TA的空间
加好友
用道具
新手上路
加关注
发消息
只看该作者
4楼
发表于: 2012-06-02
呵呵,现在的问题就是在一个次线程中通过信号-->槽函数进入另一个线程去调用tcpsocket。但是现在总是在主线程中执行呢。
共
条评分
回复
举报
离线
xie133
UID:131601
注册时间
2012-05-11
最后登录
2012-09-28
在线时间
23小时
发帖
28
搜Ta的帖子
精华
0
金钱
280
威望
38
贡献值
0
好评度
28
访问TA的空间
加好友
用道具
新手上路
加关注
发消息
只看该作者
5楼
发表于: 2012-06-02
从槽函数在发送一个信号另一个线程, 另一个线程的槽函数执行的时候不就在另一个线程了。
共
条评分
回复
举报
离线
jsjs2001
UID:124673
注册时间
2011-11-20
最后登录
2012-09-06
在线时间
65小时
发帖
18
搜Ta的帖子
精华
0
金钱
178
威望
28
贡献值
0
好评度
18
访问TA的空间
加好友
用道具
新手上路
加关注
发消息
只看该作者
6楼
发表于: 2012-06-02
原来是这样啊,你的意思是没法实现在一个次线程调用另一个次线程的socket了。晕,那我不是彻底杯具了,那有没有什么办法来转发信息呢???
共
条评分
回复
举报
离线
xie133
UID:131601
注册时间
2012-05-11
最后登录
2012-09-28
在线时间
23小时
发帖
28
搜Ta的帖子
精华
0
金钱
280
威望
38
贡献值
0
好评度
28
访问TA的空间
加好友
用道具
新手上路
加关注
发消息
只看该作者
7楼
发表于: 2012-06-02
你在一个次线程里面根本连接不到另外一个线程,当然不可以调用,至少需要主线程帮你转一次,然后主线程帮两个次线程做一次连接。意思和我前面说的服务器给两个客户端做一次穿墙一样。
共
条评分
回复
举报
离线
jsjs2001
UID:124673
注册时间
2011-11-20
最后登录
2012-09-06
在线时间
65小时
发帖
18
搜Ta的帖子
精华
0
金钱
178
威望
28
贡献值
0
好评度
18
访问TA的空间
加好友
用道具
新手上路
加关注
发消息
只看该作者
8楼
发表于: 2012-06-02
好的 谢谢你了啊。
我再去试试
共
条评分
回复
举报
离线
jsjs2001
UID:124673
注册时间
2011-11-20
最后登录
2012-09-06
在线时间
65小时
发帖
18
搜Ta的帖子
精华
0
金钱
178
威望
28
贡献值
0
好评度
18
访问TA的空间
加好友
用道具
新手上路
加关注
发消息
只看该作者
9楼
发表于: 2012-06-02
回 7楼(xie133) 的帖子
我已经试过了,其实在次线程也可以连接另一个次线程,当然前提是找到要连接的那个线程的指针。还是很感谢你了,折腾了我蛮久的。
共
条评分
回复
举报
离线
xie133
UID:131601
注册时间
2012-05-11
最后登录
2012-09-28
在线时间
23小时
发帖
28
搜Ta的帖子
精华
0
金钱
280
威望
38
贡献值
0
好评度
28
访问TA的空间
加好友
用道具
新手上路
加关注
发消息
只看该作者
10楼
发表于: 2012-06-04
你找的过程就是主线程帮你找的,也就是我说要的主线程帮你做一次连接。
共
条评分
回复
举报
离线
jsjs2001
UID:124673
注册时间
2011-11-20
最后登录
2012-09-06
在线时间
65小时
发帖
18
搜Ta的帖子
精华
0
金钱
178
威望
28
贡献值
0
好评度
18
访问TA的空间
加好友
用道具
新手上路
加关注
发消息
只看该作者
11楼
发表于: 2012-06-05
呵呵,我不是用主线程找的哦 我建立套接字和thread指针的QMap 然后将套接字描述符存入数据库,所以根据查找套接字描述符就可以得到对应的线程指针,然后发信号,进入要调用的线程。
共
条评分
回复
举报
离线
jsjs2001
UID:124673
注册时间
2011-11-20
最后登录
2012-09-06
在线时间
65小时
发帖
18
搜Ta的帖子
精华
0
金钱
178
威望
28
贡献值
0
好评度
18
访问TA的空间
加好友
用道具
新手上路
加关注
发消息
只看该作者
12楼
发表于: 2012-06-05
查找的过程也是在次线程中,感觉使用线程最好用movetothread的方法会比较好,利于信号-槽函数的调用。
共
条评分
回复
举报
发帖
回复
返回列表
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
篇
全选