博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
day8-解决socket粘包之大数据
阅读量:7059 次
发布时间:2019-06-28

本文共 770 字,大约阅读时间需要 2 分钟。

一、概述

  刚刚我们在window的操作系统上,很完美的解决了,大数据量的数据传输出现的问题,但是在Linux环境下执行会出现什么状况呢?接下来我们拭目以待。

  客户端和服务端的代码还是在 中的代码

二、linux下运行效果

2.1、客户端的效果图

我擦咧,出错了,我们来看看出得什么错误?我们先看看服务端的代码:

终于明白了,原来是服务端两次发送给客户端的数据粘在一起了,为什么会造成粘包呐?

答:服务端把两次发送的操作强制的合成一次发送给客户端,所以导致数据粘在一起了。

为啥在windows上是ok的?

答:因为python3的版本是可以的,但是python2.7的版本就会出现粘包的现象,但是有的时候python3也会出现粘包现象。

那我们如何解决这个问题呢?接下来我们就来解决这个问题。

三、sleep解决粘包

  我们可以先sleep一下,这个样子就可以使缓冲区超时,就不在等下一次的了,这样就可以和下一条命令隔离开了。

3.1、服务端代码改进

说明:在两次发送之前sleep一下

输出结果:

不过总觉得,用sleep这种方法太low了,这个还需要一个反应的时间。

四、服务端插入交互解决粘包问题

  我在服务端来一个等待客户端确认,就ok了,这个确认不需要我们用户输入,而是客户端自动的给你来这个响应,就是说,客户端自动的写好代码,自动的给服务器一个响应,只要收到服务端的数据大小,我就立刻给服务器一个响应,就是在第一次send和第二次send之前插入一个交互,就能把数据分开了。

4.1、客户端代码改进

说明:发送确认信息给服务端

4.2、服务端代码改进

说明:等待客户端的信息确认

4.3、思路图

 

 

转载于:https://www.cnblogs.com/zhangqigao/articles/7159923.html

你可能感兴趣的文章
freebsd 从普通用户切换到root下
查看>>
oracle安装前环境检查
查看>>
ansible出错
查看>>
linux内核中的信号机制--一个简单的例子
查看>>
【Java】File.createTempFile创建临时文件
查看>>
ldap bdb_db_open 错误解决办法
查看>>
根据菜单查找构建的窗体、流程、报表
查看>>
判断某年是否是闰年
查看>>
初探 C++ 标准库(二十六)
查看>>
安装SP3后不能进入系统的办法
查看>>
20150905日课程作业(计划任务mail,at,cron,)
查看>>
从源码读出不一样的Spring之Spring生态圈
查看>>
Table显示滚动条
查看>>
Java基础第三天_数组
查看>>
PHP 中文汉字转换成拼音函数
查看>>
MySQL备份需要考虑的问题
查看>>
python基础(1)
查看>>
关于php7.0下Sqli-labs搭建的小问题
查看>>
股价飙升20%市值增长100亿,《纸牌屋》之父Netflix凭什么比他的竞争者要强12倍?...
查看>>
决心书
查看>>