为了账号安全,请及时绑定邮箱和手机立即绑定

有代码看不懂,如下所示:

有代码看不懂,如下所示:

繁星淼淼 2022-12-07 16:12:12
QDataStreamout(&block,QIODevice::WriteOnly);out<<(quint16)0;out<<tr("helloTcp!!!");out.device()->seek(0);其中的 out 是什么意思,类似C++输出的cout函数吗?还有QDataStream in (tcpSocket);in>>blockSize; 其中的in类似C++输入的cout函数吗?in>>blockSize; 这句话是把什么数据写入blockSize呢,不是得有两个参数吗?我是新手,求指导,不胜感激!!!
查看完整描述

2 回答

?
慕沐林林

TA贡献2016条经验 获得超9个赞

out是一个QDataStream 对象,将声明QByteArray的实例block最为存储缓冲区,模式为只写。 同样你去看代码in是一个只读流,将socket中的数据读出来的功能。in>>的意思是读出到blocksize中。和iostream很像,out和in都和网络模块没任何关系。
为了保证在客户端能接收到完整的文件,都在数据流的最开始写入完整文件的大小信息,这样客户端就可以根据大小信息来判断是否接受到了完整的文件。而在 服务器端,在发送数据时就要首先发送实际文件的大小信息,但是,文件的大小一开始是无法预知的,所以先使用了out<< (quint16) 0;在block的开始添加了一个quint16大小的空间,也就是两字节的空间,它用于后面放置文件的大小信息。
然后 out<<tr(“hello Tcp!!!”);输入实际的文件,这里是字符串。当文件输入完成后,在使用out.device()->seek(0);返回到block的开 始,加入实际的文件大小信息,也就是后面的代码,它是实际文件的大小:out<<(quint16) (block.size() – sizeof(quint16));

查看完整回答
反对 回复 2022-12-10
?
狐的传说

TA贡献1804条经验 获得超3个赞

你把代码贴全好不好啊,这是声明的QDataStream 的对象,代码自己声明的,并不是预定义的。它是一个流对象,你可以查看QDataStream 的文档,继承自QIODevice,QDataStream out(&block,QIODevice::WriteOnly);这一句声明了out是一个QDataStream 对象,将声明QByteArray的实例block最为存储缓冲区,模式为只写。 同样你去看代码in是一个只读流,将socket中的数据读出来的功能。in>>的意思是读出到blocksize中。
和iostream很像,out和in都和网络模块没任何关系。

查看完整回答
反对 回复 2022-12-10
  • 2 回答
  • 0 关注
  • 121 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号