博客
关于我
【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(5)条件查询 | 单行函数 | 事务详解
查看>>
Mysql,group by分组查询、order by排序查询、join连接查询、union联合查询
查看>>
Mysql,sql文件导入和导出
查看>>
MYSQL:int类型升级到bigint,对PHP开发语言影响
查看>>
Mysql:mysql 5.X 报错 ERROR 1193 (HY000): Unknown system variable ‘validate_password_length‘
查看>>
MySQL:MySQL执行一条SQL查询语句的执行过程
查看>>
Mysql:SQL性能分析
查看>>
mysql:SQL按时间查询方法总结
查看>>
MySQL:什么样的字段适合加索引?什么样的字段不适合加索引
查看>>
MySQL:判断逗号分隔的字符串中是否包含某个字符串
查看>>
MySQL:某个ip连接mysql失败次数过多,导致ip锁定
查看>>
MySQL:索引失效场景总结
查看>>
Mysql:避免重复的插入数据方法汇总
查看>>
MyS中的IF
查看>>
M_Map工具箱简介及地理图形绘制
查看>>
m_Orchestrate learning system---二十二、html代码如何变的容易
查看>>
M×N 形状 numpy.ndarray 的滑动窗口
查看>>
m个苹果放入n个盘子问题
查看>>
n = 3 , while n , continue
查看>>
n 叉树后序遍历转换为链表问题的深入探讨
查看>>