zoukankan      html  css  js  c++  java
  • 网络编程基础【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、思路图

     

  • 相关阅读:
    企业微信中如何屏蔽另外一个企业的消息
    国际商标注册里面的头头道道
    如何使用charles,常见的charles功能
    Win8中GridVIew千变万化——绑定分组数据
    Win8中ListBox的ScrollIntoView方法失效
    一起零基础通过Nosql考试~~
    Ubuntu部署ros小龟爬爬实例
    学习算法是件怎样的事
    Centos7配置Python3.10.1
    基于Centos7、PHP7.4环境部署wordpress
  • 原文地址:https://www.cnblogs.com/luoahong/p/7211537.html
Copyright © 2011-2022 走看看