编程踩坑日记--QT

今天原本打算把tcp实现客户端往服务器收发文件的功能给实现的,本以为客户端用QT写可以省去很多细枝末节的操作,谁知到还是踩了坑。开门见山,具体踩坑的地方在使用TcpSocket的write函数往服务器写数据。

QByteArray line = file.readLine();
QTcpSocket* file_sock;
file_sock->write(line.toStdString().c_str());

服务器收到的一些文件大小比实际要小,搞了一下午没解决,只好找老师远程协助了。老师三下五除二就搞定,给出的解决方案如下:

QByteArray line = file.readLine();
QTcpSocket* file_sock;
file_sock->write(line.toStdString().c_str(),line.size());

为什么会这样呢?大体意思就是在QT中,如果不向write函数传入数据大小line.size(),当读入的数据line中存在’\0’时,'\0’以及后面的字符会被截断,导致发送的数据不完整。比如一串数据line =“abcd\0efg”,如果不往write中传入line.size(),那么实际发送的数据就是"abcd"。
这是老师说的,不对的话你去骂他,还有麻烦把你的正确答案告诉我哈,友好交流,不要吵架!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值