网络编程–解决粘包问题–简单版:

客户端:

import struct
import socketphone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)phone.connect(('127.0.0.1',9909))while True:# 1:发命令cmd=input('>>:').strip()#dirif not cmd:continuephone.send(cmd.encode('utf-8'))# 2:拿命令的结果,并打印#第一步:先收报头header=phone.recv(4)# 第二步:从报头中解析出来对真实数据的描述信息(数据的长度)total_size=struct.unpack('i',header)[0]#第三步:接收真实的数据recv_size=0recv_data=b''#循环接收数据,直到接收完全部数据跳出循环while recv_size <total_size:res=phone.recv(1024)recv_data+=res#为了查看接收数据recv_size+=len(res)#数据长度计算print(recv_data.decode('utf-8'))phone.close()

服务端:

import socket
import subprocess
import structphone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)phone.bind(('127.0.0.1',9909))phone.listen(5)print('starting..')while True:#链接循环conn,client_addr=phone.accept()print(client_addr)while True:try:#1:收命令cmd=conn.recv(8096)if not cmd:break#适用于linux操作系统# 2:执行命令,拿到结果# subprocess.Popen通过它可以来创建进程,并与其进行复杂的交互# cmd:标准像子进程传入需要执行的shell命令,如:ls - al## subprocess.PIPE:在创建Popen对象时,subprocess.PIPE可以初始化为stdin, stdout或stderr的参数,表示与子进程通信的标准输入流,标准输出流以及标准错误。## subprocess.STDOUT:作为Popen对象的stderr的参数,表示将标准错误通过标准输出流输出。obj=subprocess.Popen(cmd.decode('utf-8'),shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)stdout=obj.stdout.read()stderr=obj.stderr.read()# 3:把命令的结果返回给客户端# 第一步:制作固定长度的报头total_size=len(stdout)+len(stderr)header=struct.pack('i',total_size)# 第二步:把报头发送给客户端conn.send(header)# 第三步:在发送真实的数据conn.send(stdout)conn.send(stdout)# 适用于Windows操作系统except ConnectionResetError:breakconn.close()phone.close()

1:先启动服务端,在从客户端传入数据:
服务端:

客户端:
:
2:传入数据后,在客户端输入命令或者数据:
客户端:

服务端:

【Python】网络编程--解决粘包问题--简单版:相关推荐

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

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

  2. python/socket编程之粘包

    python/socket编程之粘包 粘包 只有TCP有粘包现象,UDP永远不会粘包. 首先需要掌握一个socket收发消息的原理 1 2 3 4 5 6 7 8 9 10 11 12 13 14 发 ...

  3. 网络编程-之粘包现象

    网络编程-之粘包现象 一.什么是粘包 须知:只有TCP有粘包现象,UDP永远不会粘包 粘包不一定会发生 如果发生了:1.可能是在客户端已经粘了 2.客户端没有粘,可能是在服务端粘了 首先需要掌握一个s ...

  4. Python网络编程——客户端与服务端简单信息发送与接受

    python网络编程-服务端与客户端简单信息发送与接受 思考一下我们进行网络中信息通信都需要什么或者说需要具备什么条件才能进行网络通信? 首先我们需要知道给谁发送,也就是目标机是谁,然后我们需要知道对 ...

  5. Python之网络编程(粘包、粘包解决方案)

    文章目录 tcp粘包 第一种粘包 第二种粘包 udp粘包 解决粘包现象 粘包现象是指发送方发送的若干数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾.粘包现象只会在tcp ...

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

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

  7. 网络编程- 解决黏包现象方案一(六)

    队列 利用队列的思路来解决黏包问题 总结 转载于:https://www.cnblogs.com/mys6/p/10797907.html

  8. python 网络编程 struct解包时报错 struct.error: unpack requires a buffer of 4 bytes

    报错信息 D:\Donta_tensorflow-yolov3\python\python.exe D:/10_gitee/network_programming/避障程序信号及图像接收端/20100 ...

  9. python网络编程之黏包问题

    一 : 概念 发送端发送数据,接收端不知道应该如何去接收,造成的一种数据混乱的现象. 二 : 起因 在TCP协议中,存在两个机制: 合包机制 : 通过nagle算法,将多次连续发送且间隔较小的数据,打 ...

最新文章

  1. 【数据结构-查找】1.通俗易懂讲解 —— 顺序-折半-分块查找
  2. PW Live直播 | 清华大学NLP组秦禹嘉:基于自然语言解释的数据增强
  3. 对后台返回的数据进行评分排序、时间排序!
  4. 先睹为快!第十一届数据技术嘉年华七大看点全揭秘
  5. 深入biztalk消息以及消息订阅发布路由机制(四)-消息的轮询和执行
  6. Unity发布四款新产品,加速本土化技术研发
  7. 你必须知道:localStorage、sessionStorage 和 Cookie 区别在什么地方
  8. 按键精灵开发后台命令脚本的操作教程
  9. 「 OptiTrack」搭建动作视觉运动捕捉系统教程
  10. 中秋节主题征文 | 那些不朽的描写月亮的诗词
  11. java集成easyExcel动态生成表头并在浏览器下载excel
  12. VS2019 编译 paho-mqtt-cpp 遇到的问题
  13. TFT显示模组有什么功能
  14. 主板没有rgb接口怎么接灯_想拥有RGB灯效,不懂这些怎么行!
  15. 企业的考勤管理系统应该具备哪些功能!
  16. validation检查框架
  17. c语言实现登录注册功能
  18. git在commit提交时报:On branch master Changes not staged for commit
  19. Docker迁移JIRA
  20. python直方图规定化_python用直方图规定化实现图像风格转换

热门文章

  1. Android开发艺术探索2
  2. 电子会议桌牌或将替代纸质桌牌标签
  3. 你知道什么是网站? 还有什么是网页吗?
  4. 卡苹果6plus在线_嘉兴公交“嘉通行”APP上线,公交卡可以在线充值啦!
  5. 2021中国上市公司500强市值门槛、总市值及地域分布:市值门槛增长、主要集中经济发展强劲的省市[图]
  6. Android布局——线性布局、相对布局、帧布局、表格布局、网格布局、约束布局
  7. 居然是 admin/123456,乌克兰这军方系统也是……
  8. Jquery排他思想实现
  9. python 下三角矩阵_Python | 矩阵的上三角
  10. wxWidgets中从xrc文件中获取菜单选项的指针