• 网络编程基础【day09】:解决socket粘包之大数据(七)


    本节内容

    1. 概述
    2. linux下运行效果

    3. sleep解决粘包

    4. 服务端插入交互解决粘包问题

    一、概述

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

      客户端和服务端的代码还是在 day8-接收大数据  中的代码

    二、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、思路图

     

  • 相关阅读:
    (二十八)缓存:很多时候我们都用错了!
    (二十七)缓存:进程内缓存要怎么玩?
    JavaScript 获取7天之前或之后的日期
    实现文本复制功能
    vue项目 PC端点击查看大图
    vue使用canvas生成海报图
    禁用微信转发给好友和朋友圈
    vue防抖节流函数---组件封装,防止按钮多次点击
    看到几个不错的打印方式,分享几个觉得不错的
    为啥没更新呢
  • 原文地址:https://www.cnblogs.com/luoahong/p/7211537.html
Copyright © 2020-2023  润新知