Python中Socket粘包问题的解决
服务器端
import socket import subprocess import struct server = socket.socket() ip_port = ("192.168.15.33",8001) server.bind(ip_port) server.listen() conn,addr = server.accept()while 1:print("等待接收消息...")from_client_cmd = conn.recv(1024).decode("utf-8")#接收客户端消息print(from_client_cmd)sub_obj = subprocess.Popen( #通过subprocess模块执行服务端指令,并拿到指令结果from_client_cmd, #客户端指令shell = True,stdout = subprocess.PIPE, #标准输出:正确指令的执行结果stderr = subprocess.PIPE, #标准错误输出:错误指令的执行结果 )server_cmd_msg = sub_obj.stdout.read()#server_cmd_msg = sub_obj.stderr.read() #接收到的返回信息是bytes类型,并且windoes系统的默认编码为gbkcmd_msg_len = len(server_cmd_msg) #计算你要发送的数据长度msg_len_stru = struct.pack("i",cmd_msg_len)#先对数据长度进行打包,打包成4个字节的数据,目的是为了和你将要发送的数据拼接在一起,就像我们自制一个消息头.conn.send(msg_len_stru) #首先发送打包成功后的那4个字节的数据conn.sendall(server_cmd_msg) #循环send数据,直到数据全部发送成功 conn.close() server.close()
客户器端
import socket import struct client = socket.socket() server_ip_port = ("192.168.15.33",8001) client.connect(server_ip_port)while 1:msg = input("请输入要执行的命令>>>>>")client.send(msg.encode("utf-8"))from_server_msglen = client.recv(4)#先接受服务端要发送给我的数据长度,前四个字节,固定的unpack_len_msg = struct.unpack("i",from_server_msglen)[0]recv_msg_len = 0all_msg = b""while recv_msg_len < unpack_len_msg:every_recv_date = client.recv(1024)all_msg += every_recv_date #将每次接收到的数据进行拼接和统计recv_msg_len += len(every_recv_date) #对每次接受到的数据进行累加print(all_msg.decode("gbk")) client.close()
转载于:https://www.cnblogs.com/sdadx/p/9049730.html
Python中Socket粘包问题的解决相关推荐
- 关于php中Socket粘包问题的3种解决方案,不断提升质量
在 Java 语言中,传统的 Socket 编程分为两种实现方式,这两种实现方式也对应着两种不同的传输层协议:TCP 协议和 UDP 协议,但作为互联网中最常用的传输层协议 TCP,在使用时却会导致粘 ...
- 自定义Udp/Tcp协议,通信协议Socket/WebSocket,IM粘包、分包解决等(2),ProtocolBuffer
> 自定义Udp/Tcp协议/通信协议(Java/C):自定义构建和解析IM协议消息:IM自定义UDP通信协议 类似于网络通信中的TCPIP协议一般,比较可靠的通信协议往往包含有以下几个组成 ...
- python tcp处理_python中TCP粘包问题解决方案
TCP协议中的粘包问题 1.粘包现象 基于TCP写一个远程cmd功能 #服务端 importsocketimportsubprocess sever=socket.socket() sever.bin ...
- python 套接字 struck_Python socket粘包问题(最终解决办法)
套接字: 就是将传输层以下的协议封装成子接口 对于应用程序来说只需调用套接字的接口,写出的程序自然是遵循tcp或udp协议的 实现第一个功能个: 实现:通过客户端向服务端发送命令,调取windows下 ...
- golang中tcp socket粘包问题和处理
http://www.01happy.com/golang-tcp-socket-adhere/ 在用golang开发人工客服系统的时候碰到了粘包问题,那么什么是粘包呢?例如我们和客户端约定数据交互格 ...
- socket Php 粘包,python3 tcp的粘包现象和解决办法解析
这篇文章主要介绍了python3 tcp的粘包现象和解决办法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 服务器端 import socket ...
- C# socket通信 接收缓冲区大小设置,以及粘包问题的解决
C# socket通信 接收缓冲区大小,以及粘包问题的解决 一. Socket接收缓冲区无论: 1.buffer设置有多大: 2.同步接收还是异步接收: 3.发送超过 43690 也就是 42KB的字 ...
- 解决VS Code连接远程服务器使用Python中的matplotiib包画图无法显示的问题
项目场景: 在使用VS Code连接远程服务器使用Python中的matplotiib包画图时,会出现无法显示的问题 问题描述: 在直接执行画图程序时,会报错:RuntimeError: Invali ...
- Python中socket解读
操作系统底层原理 操作系统:(Operating System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在"裸机"上的最基本的系统软件,任何其他软件都必须 ...
- Python学习,python中socket解读
操作系统底层原理 操作系统:(Operating System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在"裸机"上的最基本的系统软件,任何其他软件都必须 ...
最新文章
- 2021年大数据常用语言Scala(八):基础语法学习 循环
- Spring AOP动态代理-切面
- C函数 mktemp
- ubuntu16.04安装torch
- Windows phone 应用开发[3]-UI 设计
- Python学习笔记:偏函数
- 搜狗词库爬虫(2):基础爬虫框架的运行流程
- linux container 原理,容器概念与Linux Container原理
- 不附加数据库 ASP.NET调用.sql文件
- 走向TensorFlow2.0,一步到位
- 七夕祝福网页制作_啥?七夕过了你还不知道自己为啥单身??
- 华为hcia认证有哪些方向?华为hcia认证哪些方向比较好,值得推荐?
- WebIM Vue Demo 使用文档
- halcon入门之_提取遥控器字符并且写入txt文本
- inv如何用计算机计算,计算器INV是用那个键表示的
- ios12微信H5输入框软键盘关闭后,页面无法回到正常位置
- 10年后重温《我奋斗了18年才和你坐在一起喝咖啡》
- Oracle Namespace 说明
- 影评《北京爱情故事》告诉我们一些事
- Android卡顿优化分析
热门文章
- 065_VFPage中CallBack回调函数的解释
- 经典股票图形:蛟龙出海
- 判断字符串括号是否闭合(){}[]
- linux增加虚拟内存
- WinHTTP Web Proxy Auto-Discovery Service
- SpringMVC之二:配置 Spring MVC
- Python Tutorial 实践(2)
- 计算机网络和lnternet的课件,Computer Networks and Internets《计算机网络与因特网》课件.ppt...
- Linux系统编程—— fork() 函数详解
- reactor ---- 反应堆模型