博客
关于我
【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/

你可能感兴趣的文章
Nginx服务器基本配置
查看>>
Nginx服务器的安装
查看>>
Nginx架构详解
查看>>
Nginx标准配置文件(包括反向代理、大文件上传、Https证书配置、文件预览等)
查看>>
Nginx模块 ngx_http_limit_conn_module 限制连接数
查看>>
Nginx模块 ngx_http_limit_req_module 限制请求速率
查看>>
nginx次级域名部署dva静态项目!
查看>>
nginx添加允许跨域header头
查看>>
nginx添加模块与https支持
查看>>
nginx状态监控
查看>>
Nginx用户认证
查看>>
Nginx的location匹配规则的关键问题详解
查看>>
Nginx的Rewrite正则表达式,匹配非某单词
查看>>
Nginx的使用总结(一)
查看>>
Nginx的使用总结(三)
查看>>
Nginx的使用总结(二)
查看>>
Nginx的使用总结(四)
查看>>
Nginx的可视化神器nginx-gui的下载配置和使用
查看>>
nginx的平滑升级方法:
查看>>
Nginx的是什么?干什么用的?
查看>>