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

时间:2023-03-09 07:38:59
网络编程基础【day09】:解决socket粘包之大数据(七)

本节内容

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

  3. sleep解决粘包

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

一、概述

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

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

二、linux下运行效果

2.1、客户端的效果图

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

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

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

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

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

为啥在windows上是ok的?

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

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

三、sleep解决粘包

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

3.1、服务端代码改进

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

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

输出结果:

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

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

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

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

4.1、客户端代码改进

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

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

4.2、服务端代码改进

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

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

4.3、思路图

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