博客
关于我
【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查询语句能否让一个字段不显示出来_天天写order by,你知道Mysql底层执行原理吗?
查看>>
MySQL查询语句:揭秘专家秘籍,让你秒变数据库达人!
查看>>
mysql查询超时对PHP执行的影响
查看>>
mysql查询输出到excel文件_如何保存mysql查询输出到excel或.txt文件?
查看>>
mysql查询过程
查看>>
MySQL模拟Oracle序列sequence
查看>>
Mysql模糊查询like效率,以及更高效的写法
查看>>
MySQL死锁套路:一次诡异的批量插入死锁问题分析
查看>>
Mysql死锁问题Deadlock found when trying to get lock;try restarting transaction
查看>>
mysql每个数据库的最大连接数_MySQL数据库最大连接数
查看>>
Mysql流程控制结构,if函数、case结构、if结构、循环结构
查看>>
mysql添加外网访问权限
查看>>
mysql添加用户
查看>>
MySQL添加用户、删除用户与授权
查看>>
mysql添加用户及权限
查看>>
Mysql添加用户并授予只能查询权限
查看>>
mysql添加用户权限报1064 - You have an error in your SQL syntax问题解决
查看>>
mysql添加索引
查看>>
mysql添加表注释、字段注释、查看与修改注释
查看>>