当前位置: 首页 > news >正文

做淘宝详情页好的网站少女のトゲ在线观看

做淘宝详情页好的网站,少女のトゲ在线观看,如何修改代码wordpress,seo搜索引擎优化实战当时用TCP协议传输数据时,经常出现粘包的现象 当服务器向客户端发送数据之后,客户端还没有接收数据的时候,这段时间数据在什么地方? 1、服务器?服务器已经发出数据了 2、网线?数据应该在内存,怎…

当时用TCP协议传输数据时,经常出现粘包的现象
当服务器向客户端发送数据之后,客户端还没有接收数据的时候,这段时间数据在什么地方?
1、服务器?服务器已经发出数据了
2、网线?数据应该在内存,怎么会在网线里面,又没有内存
3、客户端?是的,这个时候数据已经到达客户端了,只不过被保存在客户端的缓存中了(内核缓冲区),客户端只有在read的时候才能读出数据
场景:服务器每次给客户端发出一条数据,但是每次发送数据的量是不一样的,这时要求客户端把服务器发过来的数据依次接收到本地并且进行对应的解析,如果客户端一次发出10个字节,那么客户端也一次读出10个字节,如果多读了,那么就把下一条数据读出来了,此时解析数据会是错误的,这就是TCP粘包

处理办法:发送端在每一个数据包前面加上包头,包头中加入数据长度
接收端接收到后的处理:首先包头的大小是固定的,一般就是一个long或者int类型,所以我们根据这个long或者int类型求出一个固定大小,8字节(long)或者4字节(int),所以在读数据包的时候直接根据这个类型先去读8字节或者4字节,这样就可以读出数据包的长度,然后根据这个长度去读后边的这个数据块
比如此次接收到的长度为100,那么就向后读取100个字节的数据,就是此次的一个包,哪怕此时缓冲区有1000个字节数据,只读这100个字节就能获取一个完整的包,剩余的900个字节就需要下一次去处理,下次处理的时候还是先读包头,读出数据包的一个长度,然后根据这个长度去读取相应的数据,这样一次一次读取就可以一点一点把数据拆分出来了

例:这里以Qt编写的基于opencv的人脸识别的服务器和客户端为例,客户端发送拍下的人脸发送到服务器进行识别,要求传输一帧完整的人脸数据,这就有可能粘包,可能同时发送两个人脸向服务器,此时就需要处理粘包
首先客户端发送图片数据

//把Mat数据转化为QbyteArray, --》编码成jpg格式
std::vector<uchar> buf;
cv::imencode(".jpg",srcImage,buf);   //这就是将拍摄的原始的图像转为jpg然后将数据放到buf中
QByteArray byte((const char*)buf.data(),buf.size()); //数据格式转为QByteArray 
//准备发送
quint64 backsize = byte.size();    //获取数据的长度,这里可以看到backsize是quint64型变量,占8个字节
QByteArray sendData;
QDataStream stream(&sendData,QIODevice::WriteOnly);
stream.setVersion(QDataStream::Qt_5_14);
//将数据放入码流,首先放入数据的长度backsize,quint64为8字节的长度,后面就是数据
stream<<backsize<<byte;  
//发送
msocket.write(sendData);  //将数据包发送

服务器接收图片数据

static quint64 bsize = 0;  //全局变量QDataStream stream(msocket); //把套接字绑定到数据流
stream.setVersion(QDataStream::Qt_5_14);if(bsize == 0){//查看目前TCP的内存缓冲区的数据长度是否能达到bsize所占的字节数,这里应该是8字节if( msocket->bytesAvailable() < (qint64)sizeof(bsize) ) return ;//说明数据长度够8个字节,然后就可以获取采集数据的长度stream>>bsize;
}//获取目前缓存中剩余数据的长度,小于刚才获取的8字节的数据长度说明数据还没有发送完成,返回继续等待
if(msocket->bytesAvailable() < bsize)
{return ;  //此时bsize没有清空,下次还会来这里检查获取的数据长度是否大于或等于bsize
}
QByteArray data;
stream>>data;
bsize = 0;   // 将bsize设为0,说明处理完了一包数据 
if(data.size() == 0)//没有读取到数据
{return;
}//显示图片
QPixmap mmp;
mmp.loadFromData(data,"jpg");
mmp = mmp.scaled(ui->picLb->size());
ui->picLb->setPixmap(mmp);
http://www.yayakq.cn/news/839661/

相关文章:

  • 建筑设计网站issuu做网站的优点
  • 合肥网站维护公司中国建设银行网站网上银行
  • 临沂网站建设怎么样如何经营网店
  • 网站建设三大部分聊城做网站的公司行情
  • 淮安维度网站建设wordpress 高清头像
  • 河南企起网站建设国内常用的crm系统
  • 电子商务网站开发需求文档国外做网站被动收入
  • 杭州网站建设推荐wordpress 不显示全文
  • 对网站的界面设计分析营销型网站开发公司电话
  • c做网站微信商城官方入口
  • 一个云主机怎么挂两个网站在网站建设上的发言总结
  • 网站数字化建设wordpress 主题 广告
  • 织梦模板网站源码下载wordpress wpml 下载
  • h5网站设计wordpress 即时
  • 上海的网站开发公司网站显示建设中页面
  • c 开发网站开发企业网站做多大
  • 营销型网站推广服务青岛网站模板
  • 珠海建站平台广告宣传设计图
  • 免费网站建设方案优化做网站跟桌面程序差别大吗
  • 智能建筑网站手机网站返回跳转
  • dede更新网站网络运维工程师自学
  • 好网站建设公司哪里好上海电商网站建设公司
  • 网站建设合同续签申请书百度建设自己的网站
  • 网软志成企业网站管理系统网站主页与导航栏的设计
  • 食品网站建设方案口碑营销的模式
  • 网站设计师需要什么知识与技能公司做网站多少钱乐器
  • 网站排名查询平台网络营销的特点主要体现为()
  • 顺企网吉安网站建设安康市代驾公司
  • 东莞企业网站建设设计网站计费系统怎么做
  • 做网站的公司排行淘宝网站建设的优点