Qt中用QTcpSocket怎么直接和显示 服务器发送的图片二进制流

zhangli0911 2011-08-15 04:35:05
如题

各位大侠们,由于对QT不熟悉,所以请大侠们多多指教

我现在服务端是C# ,发送了图片 转换为二进制流,已字节的形式发送,

qt这边接收后 是不是也要将流读成图片格式啊,最后图片将如何显示界面
...全文
646 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
AI- 2013-08-28
  • 打赏
  • 举报
回复
各位 能不能给个客户端、服务器简单的图片传送接受程序、qt 的。
bigPillow 2013-01-29
  • 打赏
  • 举报
回复
学习了。。。。
alapingping 2012-07-18
  • 打赏
  • 举报
回复
可以的、、下载软件UltraEdit,可以二进制的形式打开文件。
caobin258 2012-06-30
  • 打赏
  • 举报
回复
有没有方法读取图片的二进制数据。并保存啊
2011-08-18
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 zhangli0911 的回复:]
那你的意思就是说先发送 总长度 告诉客户端 我传的数据是这么长,然后客户端在请求服务端发送另外的数据吗?
现在服务端(C#)要一起发送文字,图片,视频,都转换为二进制流,请问有好的方式或者协议来标记是图片,文字,视频吗。而且客户端解析的时候根据标记来区分哪些是文字,哪些是图片,哪些是视频。
[/Quote]
一个比较挫但是至少能用的办法,简单的单向传输应该够用了……
MIME 类型名<LF>
长度<LF>
二进制数据
zhangli0911 2011-08-18
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 hpsmouse 的回复:]

引用 12 楼 zhangli0911 的回复:
我刚考虑要拼起来的,但是我想知道如何判断数据全部接收完!

TCP 的数据流在连接关闭之前是永远也不会完的。所以要么双方都事先知道数据有多长,传输了这么多数据以后就收工;要么一个连接只发送一份数据,看到 TCP 连接关闭了就知道数据结束了。
[/Quote]

那你的意思就是说先发送 总长度 告诉客户端 我传的数据是这么长,然后客户端在请求服务端发送另外的数据吗?
现在服务端(C#)要一起发送文字,图片,视频,都转换为二进制流,请问有好的方式或者协议来标记是图片,文字,视频吗。而且客户端解析的时候根据标记来区分哪些是文字,哪些是图片,哪些是视频。
2011-08-18
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 zhangli0911 的回复:]
我刚考虑要拼起来的,但是我想知道如何判断数据全部接收完!
[/Quote]
TCP 的数据流在连接关闭之前是永远也不会完的。所以要么双方都事先知道数据有多长,传输了这么多数据以后就收工;要么一个连接只发送一份数据,看到 TCP 连接关闭了就知道数据结束了。
AlanBruce 2011-08-18
  • 打赏
  • 举报
回复
Mark!
zhangli0911 2011-08-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 gykgod 的回复:]

可能是您的BUFFER太小
[/Quote]

比如说我服务端发送的是15000个字节,我QT读的时候 qDebug() 输出的是8000 7000 这样,分几段,我是不是要循环的去读取
jingavin0 2011-08-16
  • 打赏
  • 举报
回复
QT中的图片也和你给的QT设备有关系的吧
gykgod 2011-08-16
  • 打赏
  • 举报
回复
可能是您的BUFFER太小
zhangli0911 2011-08-16
  • 打赏
  • 举报
回复
为什么比较小的图片可以发送完成,比较大的图片接收不完整
zhangli0911 2011-08-16
  • 打赏
  • 举报
回复
谢谢 gykgod 提供的代码,很有用,还有yby4769250的思路,, 但是现在客户端接收二进制流写到图片文件里 ,图片是花屏的状态,有些看的清楚,有些看不清楚,像这种情况你们遇到过吗?
zhangli0911 2011-08-16
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 gykgod 的回复:]

全部弄完拼接起来,有带宽限制的 不可能一下子发送完毕吧

所谓细水长流~

哎呀 洒家又扯淡了。
[/Quote]

我刚考虑要拼起来的,但是我想知道如何判断数据全部接收完!

gykgod 你QQ 多少 我加你把,麻烦你了!
gykgod 2011-08-16
  • 打赏
  • 举报
回复
全部弄完拼接起来,有带宽限制的 不可能一下子发送完毕吧

所谓细水长流~

哎呀 洒家又扯淡了。

zhangli0911 2011-08-16
  • 打赏
  • 举报
回复
我发送有点大的图片 为什么 connect(tcpSocket,SIGNAL(readyRead()),this,SLOT(readMessage())); 会执行几次,然后都是分几段的读取的
yby4769250 2011-08-15
  • 打赏
  • 举报
回复
流就是流,就是一串0101的数据,你传递的,就是这样的数据,不要把它理解成图片或者声音或者视频,它仅仅是01而已,关键点是,当你把这些01读到客户端的一个buffer中后(一楼的应该用unsigned char buffer[]吧),如何保存这些数据,你把这些数据写进一个jpeg文件,它就是一张图片,你把它写进一个.txt文件,它就是一堆乱码
至善者善之敌 2011-08-15
  • 打赏
  • 举报
回复
只要严格按照发送协议和图片标准格式重新组合就可以了
zhangli0911 2011-08-15
  • 打赏
  • 举报
回复
gykgod
可以讲下你发的代码意思吗
gykgod 2011-08-15
  • 打赏
  • 举报
回复
假设你的二进制流放在char buffer[]里

FILE *fp;

fp = fopen("test.jpeg", "wb");

if(fp != NULL)
{
size_t ret = fwrite(buffer, sizeof(char), size, fp);
fclose(fp);
}

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧