博客
关于我
【Python】网络编程--解决粘包问题--简单版:
阅读量:366 次
发布时间:2019-03-04

本文共 1883 字,大约阅读时间需要 6 分钟。

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

客户端:

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

服务端:

import socketimport subprocessimport 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:             break                 conn.close()phone.close()

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

服务端:
在这里插入图片描述
客户端:
在这里插入图片描述:
2:传入数据后,在客户端输入命令或者数据:
客户端:
在这里插入图片描述
服务端:
在这里插入图片描述

转载地址:http://fpyg.baihongyu.com/

你可能感兴趣的文章
mysql 内连接、自然连接、外连接的区别
查看>>
mysql 写入慢优化
查看>>
mysql 分组统计SQL语句
查看>>
Mysql 分页
查看>>
Mysql 分页语句 Limit原理
查看>>
MySql 创建函数 Error Code : 1418
查看>>
MySQL 创建新用户及授予权限的完整流程
查看>>
mysql 创建表,不能包含关键字values 以及 表id自增问题
查看>>
mysql 删除日志文件详解
查看>>
mysql 判断表字段是否存在,然后修改
查看>>
MySQL 到底能不能放到 Docker 里跑?
查看>>
mysql 前缀索引 命令_11 | Mysql怎么给字符串字段加索引?
查看>>
MySQL 加锁处理分析
查看>>
mysql 协议的退出命令包及解析
查看>>
mysql 参数 innodb_flush_log_at_trx_commit
查看>>
mysql 取表中分组之后最新一条数据 分组最新数据 分组取最新数据 分组数据 获取每个分类的最新数据
查看>>
MySQL 命令和内置函数
查看>>
MySQL 和 PostgreSQL,我到底选择哪个?
查看>>
mysql 四种存储引擎
查看>>
MySQL 在并发场景下的问题及解决思路
查看>>