新浪微博
腾讯微博
会员列表
统计排行
基本信息
到访IP统计
管理团队
管理统计
在线会员
会员排行
版块排行
帖子排行
标签排行
帮助
下拉
用户名
电子邮箱
用户名
密 码
记住登录
登录
找回密码
注册
快捷通道
关闭
您还没有登录,快捷通道只有在登录后才能使用。
立即登录
还没有帐号? 赶紧
注册一个
首页
论坛
Qt下载
作品展
群组
个人中心
捐赠、管理与开发
邮件订阅
帖子
文章
日志
用户
版块
群组
帖子
搜索
QTCN开发网
>
Qt基础编程
>
Qt C/S问题
发帖
回复
返回列表
新帖
7423
阅读
7
回复
[提问]
Qt C/S问题
[复制链接]
上一主题
下一主题
离线
omonkey
UID:129602
注册时间
2012-03-29
最后登录
2012-07-11
在线时间
25小时
发帖
14
搜Ta的帖子
精华
0
金钱
140
威望
24
贡献值
0
好评度
14
访问TA的空间
加好友
用道具
新手上路
关闭
个人中心可以申请新版勋章哦
立即申请
知道了
加关注
发消息
只看楼主
倒序阅读
楼主
发表于: 2012-07-01
关键词:
QT4
问题
网络通信
线程
图片
Client_QDataStream.tar.gz
(5 K) 下载次数:9
Client
Server_QDataStream.tar.gz
(4 K) 下载次数:7
Server
代码如上,功能是客户端可以获取服务器桌面的截图。
实现方式:Server先截图,再将
图片
分成几块二进制
数据
,然后分块发送,每次客户端接受后都返回一条信息表示成功接收,当数据发送完毕后服务器 发送空二进制数据给客户端,表示结束,然后客户端把图片
显示
出来。
经测试,客户端没
问题
。
问题如下:
文件
:thread.cpp
图片:snapshot5.png
问题一:36行的send的数据发不出去,导致客户端一直处于等待,除非调用37行的函数或者关闭服务器,否则数据发不出去,以下代码已证实send已
执行
,因为已经成功调用了startTimer函数。
问题二:如果让下图thread在栈初始化而不是在堆初始化,问题一中36行的send就可一正常发送数据,这是为什么呢?
PS:send封装了(write函数和waitForBytesWritten函数),暂时将服务器改成单
线程
,因为
多线程
会有一些很奇怪的
错误
文件:server.cpp
图片:snapshot6.png
有
没有
什么更好的方式实现这个服务器呢?比如说服务器与客户端以什么方式通信比较好呢?
共
条评分
回复
举报
分享到
淘江湖
新浪
QQ微博
QQ空间
开心
人人
豆瓣
网易微博
百度
鲜果
白社会
飞信
离线
2nth0nyj
UID:70695
注册时间
2008-12-03
最后登录
2012-10-08
在线时间
20小时
发帖
7
搜Ta的帖子
精华
0
金钱
70
威望
8
贡献值
0
好评度
7
访问TA的空间
加好友
用道具
新手上路
加关注
发消息
只看该作者
1楼
发表于: 2012-07-02
36行的socket.send(QByteArray())是没有发任何东西的, 感觉就是没有发出去。 加了37行服务器端断开了链接, 客户端也就知道了链接断开,所以图片显示出来了。
至于线程在stack上初始化, 也是因为线程执行完毕销毁了, 从而断开了链接。 如果栈上初始化线程, 是会出现很奇怪的错误,有可能主线程继续执行, 创建的线程根本就没有机会执行。
共
条评分
回复
举报
离线
omonkey
UID:129602
注册时间
2012-03-29
最后登录
2012-07-11
在线时间
25小时
发帖
14
搜Ta的帖子
精华
0
金钱
140
威望
24
贡献值
0
好评度
14
访问TA的空间
加好友
用道具
新手上路
加关注
发消息
只看该作者
2楼
发表于: 2012-07-02
回 1楼(2nth0nyj) 的帖子
哦,懂了,谢谢。虽然说是连接没有断开所以信息发不出去,那有没有什么解决方法呢?不断开连接也能将最后那条数据发送出去呢?
共
条评分
回复
举报
离线
2nth0nyj
UID:70695
注册时间
2008-12-03
最后登录
2012-10-08
在线时间
20小时
发帖
7
搜Ta的帖子
精华
0
金钱
70
威望
8
贡献值
0
好评度
7
访问TA的空间
加好友
用道具
新手上路
加关注
发消息
只看该作者
3楼
发表于: 2012-07-02
回 2楼(omonkey) 的帖子
弄个表示结束的标志, 就行了吧??
共
条评分
回复
举报
离线
omonkey
UID:129602
注册时间
2012-03-29
最后登录
2012-07-11
在线时间
25小时
发帖
14
搜Ta的帖子
精华
0
金钱
140
威望
24
贡献值
0
好评度
14
访问TA的空间
加好友
用道具
新手上路
加关注
发消息
只看该作者
4楼
发表于: 2012-07-02
回 3楼(2nth0nyj) 的帖子
其实这个我之前就试过了,但是它就最后一条数据发不出去,也就是含结束标志的数据,要切断服务器与客户端连接才发送出去
共
条评分
回复
举报
离线
2nth0nyj
UID:70695
注册时间
2008-12-03
最后登录
2012-10-08
在线时间
20小时
发帖
7
搜Ta的帖子
精华
0
金钱
70
威望
8
贡献值
0
好评度
7
访问TA的空间
加好友
用道具
新手上路
加关注
发消息
只看该作者
5楼
发表于: 2012-07-02
回 4楼(omonkey) 的帖子
试试不用缓冲的呢, OpenMode设置Unbuffered, 这个问题还有点奇怪呢?
共
条评分
回复
举报
离线
omonkey
UID:129602
注册时间
2012-03-29
最后登录
2012-07-11
在线时间
25小时
发帖
14
搜Ta的帖子
精华
0
金钱
140
威望
24
贡献值
0
好评度
14
访问TA的空间
加好友
用道具
新手上路
加关注
发消息
只看该作者
6楼
发表于: 2012-07-02
回 5楼(2nth0nyj) 的帖子
用Unbuffered的话它
抛QIODevice::read: WriteOnly device异常
然后我就改成ReadWrite|Unbuffered,结果跟没加Unbuffered一样。虽然问题不能解决,不过还是谢谢你啦
共
条评分
回复
举报
离线
且行且学
UID:131950
注册时间
2012-05-18
最后登录
2016-06-05
在线时间
15小时
发帖
3
搜Ta的帖子
精华
0
金钱
28
威望
13
贡献值
0
好评度
3
访问TA的空间
加好友
用道具
新手上路
加关注
发消息
只看该作者
7楼
发表于: 2013-04-27
怎么没回应了,最终问题解决了吗?
共
条评分
回复
举报
发帖
回复
返回列表
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
篇
全选