服务器端

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粘包问题的解决的更多相关文章

  1. 剖析和解决Python中网络粘包的正确姿势

    目录 1.粘包及其成因 1.1.粘包产生 1.2.粘包产生的原因 2.尝试解决粘包 2.1.指定数据包的长度 2.2.固定数据包的长度 2.3.用函数实现多次调用发送数据 3.解决粘包问题的正确姿势 ...

  2. 【python】-- Socket粘包问题 ,解决粘包的几种方法、socket文件下载,md5值检验

    上一篇随笔:“socket 接收大数据”,在win系统上能够运行,并且解决了大数据量的数据传输出现的问题,但是运行在linux系统上就会出现如下图所示的情况: 就是服务端两次发送给客户端的数据(第一次 ...

  3. python中TCP粘包问题解决方案

    TCP协议中的粘包问题 1.粘包现象 基于TCP写一个远程cmd功能 #服务端 import socket import subprocess sever = socket.socket() seve ...

  4. socket粘包现象加解决办法

    socket粘包现象分析与解决方案 简单远程执行命令程序开发(内容回顾) res = subprocess.Popen(cmd.decode('utf-8'),shell=True,stderr=su ...

  5. Python socket粘包问题(初级解决办法)

    server端配置: import socket,subprocess,struct from socket import * server=socket(AF_INET,SOCK_STREAM) s ...

  6. python socket的应用 以及tcp中的粘包现象

    1,socket套接字 一个接口模块,在tcp/udp协议之间的传输接口,将其影藏在socket之后,用户看到的是socket让其看到的. 在tcp中当做server和client的主要模块运用 #s ...

  7. Python socket粘包解决

    socket粘包: socket 交互send时,连续处理多个send时会出现粘包,soket会把两条send作为一条send强制发送,会粘在一起. send发送会根据recv定义的数值发送一个固定的 ...

  8. python中TCP协议中的粘包问题

    TCP协议中的粘包问题 1.粘包现象 基于TCP实现一个简易远程cmd功能 #服务端 import socket import subprocess sever = socket.socket() s ...

  9. 网络编程——TCP协议、UDP协议、socket套接字、粘包问题以及解决方法

    网络编程--TCP协议.UDP协议.socket套接字.粘包问题以及解决方法 TCP协议(流式协议) ​ 当应用程序想通过TCP协议实现远程通信时,彼此之间必须先建立双向通信通道,基于该双向通道实现数 ...

随机推荐

  1. RHEL下SendMail修改发邮箱地址

    RHEL(Oracle Linxu/CentOS)系统下,如果使用sendmail发送邮件,如果不特殊设置,一般发件箱地址为user@hostname,例如,hostname为DB-Server.lo ...

  2. c# 建立到数据源的连接 以及获取项目配置文件的属性

    两种连接数据库的写法: <connectionStrings> <add name="HRModelsContainer" connectionString=&q ...

  3. Oracle EBS when-validate-record 个性化无效果

    在对FORM进行个性化时,针对对应块添加 when-validate-record ,结果做实验的时候无效果. 原因: FORM 中对应的 BLOCK 没有 when-validate-record ...

  4. c/c++ 浅拷贝

    c/c++ 浅拷贝 编译器合成的拷贝构造函数和=重载函数,只是做如下处理: 对象1.成员变量a = 对象2.成员变量a 如果成员变量a是指针,执行完拷贝构造函数或者*=重载函数**后,对象1和对象2的 ...

  5. VS快捷键失效问题

    VS作为宇宙最强IDE,为我们提供了强大的快捷键组合,熟练的使用这些快捷键能极大提高我们的编码效率,但是在我们实际使用的过程中经常会遇到某个快捷键组合失效的问题. 问题原因: 一般都是VS的快捷键与电 ...

  6. Linux补充

    1.从国内豆瓣源安装软件 pip install -i https://pypi.doubanio.com/simple paramiko --trusted-host pypi.douban.com

  7. 聚类——GAKFCM

    聚类——GAKFCM 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 参考文献:黄白梅. 基于GA优化的核模糊C均值聚类算法的研究[D]. 武汉科技大学 ...

  8. 【APIO2018】铁人两项

    [APIO2018]铁人两项 题目描述 大意就是给定一张无向图,询问三元组\((s,c,f)\)中满足\(s\neq c\neq f\)且存在\((s\to c\to f)\)的简单路径(每个点最多经 ...

  9. Android面试题目整理与解说(二)

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/bz419927089/article/details/31386787 1.Dalvik和标准Jav ...

  10. [转自机器之心] 刚入校门的PhD们还可以抢救一下(读研读博指南)

    本文作者 Lucy A. Taylor 最近博士毕业,取得了牛津大学跨学科生物科学博士学位. 读博是件难事,一路上可能会遇到很多挫折.失败.崩溃时刻.Lucy 多么希望在开始读博时就能收到一些有益的建 ...