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系统的默认编码为gbk
cmd_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 = 0
all_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()
Python中Socket粘包问题的解决的更多相关文章
- 剖析和解决Python中网络粘包的正确姿势
目录 1.粘包及其成因 1.1.粘包产生 1.2.粘包产生的原因 2.尝试解决粘包 2.1.指定数据包的长度 2.2.固定数据包的长度 2.3.用函数实现多次调用发送数据 3.解决粘包问题的正确姿势 ...
- 【python】-- Socket粘包问题 ,解决粘包的几种方法、socket文件下载,md5值检验
上一篇随笔:“socket 接收大数据”,在win系统上能够运行,并且解决了大数据量的数据传输出现的问题,但是运行在linux系统上就会出现如下图所示的情况: 就是服务端两次发送给客户端的数据(第一次 ...
- python中TCP粘包问题解决方案
TCP协议中的粘包问题 1.粘包现象 基于TCP写一个远程cmd功能 #服务端 import socket import subprocess sever = socket.socket() seve ...
- socket粘包现象加解决办法
socket粘包现象分析与解决方案 简单远程执行命令程序开发(内容回顾) res = subprocess.Popen(cmd.decode('utf-8'),shell=True,stderr=su ...
- Python socket粘包问题(初级解决办法)
server端配置: import socket,subprocess,struct from socket import * server=socket(AF_INET,SOCK_STREAM) s ...
- python socket的应用 以及tcp中的粘包现象
1,socket套接字 一个接口模块,在tcp/udp协议之间的传输接口,将其影藏在socket之后,用户看到的是socket让其看到的. 在tcp中当做server和client的主要模块运用 #s ...
- Python socket粘包解决
socket粘包: socket 交互send时,连续处理多个send时会出现粘包,soket会把两条send作为一条send强制发送,会粘在一起. send发送会根据recv定义的数值发送一个固定的 ...
- python中TCP协议中的粘包问题
TCP协议中的粘包问题 1.粘包现象 基于TCP实现一个简易远程cmd功能 #服务端 import socket import subprocess sever = socket.socket() s ...
- 网络编程——TCP协议、UDP协议、socket套接字、粘包问题以及解决方法
网络编程--TCP协议.UDP协议.socket套接字.粘包问题以及解决方法 TCP协议(流式协议) 当应用程序想通过TCP协议实现远程通信时,彼此之间必须先建立双向通信通道,基于该双向通道实现数 ...
随机推荐
- 任意activity作为启动页
在androidManifest.xml中对应的activity中添加 android:exported=“true”
- mssql sql server上如何建一个只读视图–视图锁定的另类解决方案
转自:http://www.maomao365.com/?p=4508 <span style="color:red;font-weight:bold;">我们熟知一个 ...
- 前后端分离djangorestframework——路由组件
在文章前后端分离djangorestframework——视图组件 中,见识了DRF的视图组件强大,其实里面那个url也是可以自动生成的,就是这么屌 DefaultRouter urls文件作如下调整 ...
- e lisp 自定义函数
自定义函数 (defun multi-by-seven (number) "multi number by seven" (interactive "p") ( ...
- Lua不显示小数点0的部分
我的环境:Unity3D 5.3.7p4 XLua版本v2.1.6 基于Lua5.3 (https://github.com/Tencent/xLua) 在Lua中数字不区分整型或浮点型,所有都是nu ...
- Spring的AOP开发的相关术语
转载自 https://www.cnblogs.com/ltfxy/p/9873618.html SpringAOP简介: AOP思想最早是由AOP联盟组织提出的.Spring使用这种思想最好的框架. ...
- JavaScript对象原型写法详解
体现对象原型分步式写法 //原型分步式写法 //构造函数 function Person(){} //对象原型 Person.prototype.name = 'Avensatr'; Pers ...
- 前端性能优化成神之路--SSR(服务端渲染)
Nuxt.js的介绍 Nuxt.js概述 nuxt.js简单的说是Vue.js的通用框架,最常用的就是用来作SSR(服务器端渲染).Vue.js是开发SPA(单页应用)的,Nuxt.js这个框架,用V ...
- vue源码分析—数据绑定
放进沙里附件拉萨就发牢骚:剑飞:啊撒
- ContentTypes 的应用
ContentTypes django 中的一个应用程序(app),可以跟踪Django项目中安装的所有模型(Model),提供用于处理模型的高级通用接口. Contenttypes应用的核心是Con ...