立即学习:https://edu.csdn.net/course/play/24458/296240?utm_source=blogtoedu

粘包现象:服务器接收到客户端的命令后,进行执行得到结果后,再发送回给客户端,在这个过程中如果服务器返回的结果的字节数会大于客户端所接收最大字节数(此处以1024为客户端接收的最大字节数),则大于1024字节的残余结果会堆积在服务器发送返回客户端的管道中,这个现象叫做残余数据等下一次再执行客户端命令返回命令结果给客户端时,会先把管道中的残余数据发送返回给客户端,这时候就会出现客户端接收的结果并不是自己发送命令所希望得到的结果,因为所接收的结果含有上一次执行时的残余数据甚至只有残余数据,即多次命令(也成为多个包)的结果掺杂在了一起,这种现象成为粘包现象。例子如下:

'''先运行服务器端,再在客户端上一次输入dir、tasklist、dir命令,观察服务器端执行命令的结果的字节数长度,以及观察客户端接收到的结果,尤其是两次运行dir命令的结果
'''客户端的结果:'''
E:\python3\venv2\venv\Scripts\python.exe C:/Users/jinlin/Desktop/python_further_study/socket编程/简单的套接字通讯加循环/客户端.py
请输入命名:dir
服务器返回来的数据:  驱动器 C 中的卷是 本地磁盘卷的序列号是 B476-3C7CC:\Users\jinlin\Desktop\python_further_study\socket编程\模拟ssh远程操作命令 的目录2020/03/09  10:57    <DIR>          .
2020/03/09  10:57    <DIR>          ..
2020/03/07  13:35                 0 __init__.py
2020/03/07  10:02               895 客户端_.py
2020/03/09  10:57             1,112 服务器端_.py3 个文件          2,007 字节2 个目录 124,751,876,096 可用字节**************************************************
请输入命名:tasklist
服务器返回来的数据:
映像名称                       PID 会话名              会话#       内存使用
========================= ======== ================ =========== ============
System Idle Process              0 Services                   0          4 K
System                           4 Services                   0        588 K
smss.exe                       324 Services                   0        804 K
csrss.exe                      524 Services                   0      9,064 K
csrss.exe                      620 Console                    1     32,996 K
wininit.exe                    628 Services                   0      4,144 K
winlogon.exe                   656 Console                    1      6,692 K
services.exe                   724 Services                   0      8,568 K
lsass.exe                      732 Services                   0     11,756 K
svchost.exe                    804 Services                   0     11,556 K
svchost.exe                    844 Services                   0      9,336 K
dwm.exe
**************************************************
请输入命名:dir
服务器返回来的数据:                        948 Console                    1     24,656 K
nvvsvc.exe                     956 Services                   0      2,648 K
nvxdsync.exe                  1000 Console                    1      7,264 K
nvvsvc.exe                    1008 Console                    1      1,684 K
svchost.exe                    276 Services                   0     31,996 K
svchost.exe                    392 Services                   0     48,924 K
svchost.exe                    412 Services                   0     25,584 K
svchost.exe                    736 Services                   0     49,284 K
RtkAudioService64.exe         1056 Services                   0          4 K
RAVBg64.exe                   1076 Console                    1      1,596 K
RAVBg64.exe                   1084 Console                    1      1,432 K
ZhuDongFangYu.exe             1128 Services                   0      4,528 K
svchost.exe                   1280 Services                   0     17,032 K
spoolsv.exe
**************************************************'''服务器端的结果:
'''
464
**************************************************
9674
**************************************************
464
**************************************************'''

由上可知,dir命令返回的结果字节数是496,由tasklist运行的结果字节数为9766个,因此两次的dir命令执行的结果不一样,因为第二次dir命令的结果与tasklist命令的结果混在了一起,产生了粘包现象。

简单的粘包原因如下图:

学习笔记(10):Python网络编程并发编程-粘包现象相关推荐

  1. 学习笔记(09):Python网络编程并发编程-模拟ssh远程执行命令-代码实现

    立即学习:https://edu.csdn.net/course/play/24458/296239?utm_source=blogtoedu 1.服务器端:接收客户端发送的命令,subprocess ...

  2. 学习笔记(12):Python网络编程并发编程-解决粘包问题-简单版本

    立即学习:https://edu.csdn.net/course/play/24458/296243?utm_source=blogtoedu 粘包现象的解决:简单版 1.思路:       在服务器 ...

  3. 学习笔记(13):Python网络编程并发编程-解决粘包问题-终极版本

    立即学习:https://edu.csdn.net/course/play/24458/296244?utm_source=blogtoedu 粘包现象解决(终极版) 1.简单版的问题所在 1)报头信 ...

  4. 学习笔记(11):Python网络编程并发编程-粘包底层原理分析

    立即学习:https://edu.csdn.net/course/play/24458/296241?utm_source=blogtoedu  1.send和recv底层分析 1)不管是recv还是 ...

  5. Python网络与并发编程 02 TCP粘包

    TCP/Socket与subprocess 我们准备做一个可以在Client端远程执行Server端的shell命令并拿到其执行结果的程序,而涉及到网络通信就必然会使用到socket模块,此外还需要s ...

  6. 学习笔记(33):Python网络编程并发编程-进程池线程池

    立即学习:https://edu.csdn.net/course/play/24458/296451?utm_source=blogtoedu 进程池与线程池: 一般应用在网站上,进程池或线程池最大的 ...

  7. 学习笔记(28):Python网络编程并发编程-死锁与递归锁

    立即学习:https://edu.csdn.net/course/play/24458/296445?utm_source=blogtoedu 1.死锁(Lock()的局限性) 知识点:Lock()只 ...

  8. 学习笔记(19):Python网络编程并发编程-互斥锁

    立即学习:https://edu.csdn.net/course/play/24458/296430?utm_source=blogtoedu 1.互斥锁: 多进程间的内存是相互隔离的,因此其数据也是 ...

  9. 学习笔记(34):Python网络编程并发编程-异步调用与回调机制

    立即学习:https://edu.csdn.net/course/play/24458/296452?utm_source=blogtoedu 1.知识点:(详细见代码注释) 1)同步调用: res1 ...

最新文章

  1. v3是c语言吗 yolo_YOLOv3
  2. 深入探索.NET框架内部了解CLR如何创建运行时对象
  3. 计算机专业去荷兰还是瑞典,给申请计算机专业的同学几点建议
  4. Java JUC工具类--Exchanger
  5. LeetCode872. Leaf-Similar Trees
  6. dijkstra算法代码_深度好文:改变了我们生活方式最有影响力的5种图算法
  7. Java 匿名内部类解析
  8. 【转】PHP发送邮件之PHPMailer
  9. c语言左(<<)右(>>)移
  10. h5外卖源码php_从零搭建外卖CPS平台小程序开发
  11. 第七章 课后习题P206
  12. 永别了.武器------爱好和平人民的美好愿望(图)
  13. 利用PPT制作不一样的动态文字技巧
  14. Alexnet输入大小227x227能否调整,kernel_size偶数有什么影响。
  15. 怎样设置CCProxy
  16. 模板匹配及其源代码---Edge Based Template Matching
  17. 动态规划 - 切钢条 (python)
  18. 安装配置绿色版MySQL5.6
  19. iTerm2终端集成git缩写意思
  20. linux命令stat和top,Linux Top 命令解析 比较详细

热门文章

  1. angular 内容投影
  2. 数据库系统原理(第6章:数据库安全与保护)
  3. 一个医院院长电视机坏了,拿到一个大修理店去修
  4. oracle 数据库 锁
  5. 【记录一下】从0到1 我的python开发之路
  6. springboot 使用的配置
  7. Java 运算符及优先级
  8. android---简单的通讯录
  9. C#中往数据库插入/更新时候关于NUll空值的处理
  10. hasLayout属性