当前位置: 首页 > news >正文

北京企业建站技术厦门人才网招聘

北京企业建站技术,厦门人才网招聘,青岛企业展厅设计公司,双城网站建设哪家好立即学习:https://edu.csdn.net/course/play/24458/296243?utm_sourceblogtoedu 粘包现象的解决#xff1a;简单版 1.思路#xff1a; 在服务器端计算出执行命令后结果的字节长度#xff0c;然后再将字节数长度send即通知给客户端#xff0c;客户端根据这个字节数的长度一…立即学习:https://edu.csdn.net/course/play/24458/296243?utm_sourceblogtoedu 粘包现象的解决简单版 1.思路 在服务器端计算出执行命令后结果的字节长度然后再将字节数长度send即通知给客户端客户端根据这个字节数的长度一次性即可将相应的命令执行结果给接收进而解决了粘包问题。 2.知识点 1互联网协议报头数据 2报头是固定长度字节的一般是4字节数包含了一段数据的相关信息如数据的字节总数以及相关描述等 3struct模块是python内置模块用于报头的相关函数如res struct.pack(i,信息)是用于定制固定长度的函数得到的是一个对象而struct.unpack(i,res)则是解析报头的函数得到的是一个元组第一个元素为字节数长度 3.关键代码 服务端 ......#1接收客户端发送过来的命令cmd conn.recv(1024)#2处理命令执行命令并且获得命令得到的结果obj subprocess.Popen(cmd.decode(utf-8),shellTrue,stdoutsubprocess.PIPE,#将正确运行命令得到的结果传给管道stdout中stderrsubprocess.PIPE)#将没有正确运行命令得到的返回信息存放在stderr管道中stdout obj.stdout.read()stderr obj.stderr.read()total_size len(stderr stdout)#1定制固定长度的报头报头包含命令执行结果的字节数长度header struct.pack(i,total_size)#2)将报头发送给客户端conn.send(header)#3)将真实的命令执行结果信息发送给客户端data stdout stderrconn.send(data)...... 客户端 .......#4、接收服务器返回来的数据recv()#1)先接收由服务器返回来的报头,报头是固定长度的因此取前面4字节的数据即为报头header phone.recv(4)#返回的是一个对象#2解析返回的报头获得字节数总长信息obj_truple struct.unpack(i,header)#返回的是一个元组total_size obj_truple[0]#取元组第一个元素即为总字节数#3接收真实的命令执行结果信息recv_size 0data bwhile recv_size total_size:recv_data phone.recv(1024)#接收小于1024bytes的数据recv_size len(recv_data)data recv_dataprint(服务器返回来的数据,data.decode(gbk))....... 结果由结果可以得到输入相应的命令可以得到正确的命令执行结果 #第一个命令 请输入dir 服务器返回来的数据  驱动器 C 中的卷是 本地磁盘  卷的序列号是 B476-3C7C C:\Users\jinlin\Desktop\python_further_study\socket编程\粘包现象解决简单版 的目录 2020/03/09  14:46    DIR          . 2020/03/09  14:46    DIR          .. 2020/03/09  14:46             1,503 客户端粘包.py 2020/03/09  14:45             1,434 服务器端粘包.py                2 个文件          2,937 字节                2 个目录 122,025,189,376 可用字节 #第二个命令 请输入tasklist 服务器返回来的数据 映像名称                       PID 会话名              会话#       内存使用 System Idle Process              0 Services                   0          4 K System                           4 Services                   0        568 K smss.exe                       324 Services                   0        784 K csrss.exe                      524 Services                   0      8,760 K csrss.exe                      620 Console                    1     37,232 K wininit.exe                    628 Services                   0      3,940 K winlogon.exe                   656 Console                    1      6,564 K .............. cmd.exe                      11188 Console                    1      2,304 K tasklist.exe                  9056 Console                    1      6,176 K #第三个命令 请输入dir 服务器返回来的数据  驱动器 C 中的卷是 本地磁盘  卷的序列号是 B476-3C7C C:\Users\jinlin\Desktop\python_further_study\socket编程\粘包现象解决简单版 的目录 2020/03/09  14:46    DIR          . 2020/03/09  14:46    DIR          .. 2020/03/09  14:46             1,503 客户端粘包.py 2020/03/09  14:45             1,434 服务器端粘包.py                2 个文件          2,937 字节                2 个目录 122,024,615,936 可用字节 4.完整代码 服务端import socket import subprocess import struct phone socket.socket(socket.AF_INET,socket.SOCK_STREAM) phone.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) phone.bind((127.0.0.1,8080)) phone.listen(5) while True:#接收客户端发送过来连接服务器请求res phone.accept()conn,client_addr reswhile True:try:#1接收客户端发送过来的命令cmd conn.recv(1024)#2处理命令执行命令并且获得命令得到的结果obj subprocess.Popen(cmd.decode(utf-8),shellTrue,stdoutsubprocess.PIPE,#将正确运行命令得到的结果传给管道stdout中stderrsubprocess.PIPE)#将没有正确运行命令得到的返回信息存放在stderr管道中stdout obj.stdout.read()stderr obj.stderr.read()total_size len(stderr stdout)#1定制固定长度的报头报头包含命令执行结果的字节数长度header struct.pack(i,total_size)#2)将报头发送给客户端conn.send(header)#3)将真实的命令执行结果信息发送给客户端data stdout stderrconn.send(data)except ConnectionResetError:breakconn.close() phone.close() phone.close() 客户端#导入模块 import socket import struct#1、设置phone套接字 phone socket.socket(socket.AF_INET,socket.SOCK_STREAM)#2、连接服务器打电话,本地地址127.0.0.1 phone.connect((127.0.0.1,8080))#3、向服务器发送请求send(),发送的数据不能直接发送字符串因为要传送到物理层底层因此需要转换成二进制的bytes类型进行发送只需:发送的数据.encode(utf-8)即可 while True:cmd input(请输入)#修复客户端发送空字符串而服务器卡在接收信息处的bug,continue表示跳出本次循环重新开始下一次的循环if not cmd:continuephone.send(cmd.encode(utf-8))#4、接收服务器返回来的数据recv()#1)先接收由服务器返回来的报头,报头是固定长度的因此取前面4字节的数据即为报头header phone.recv(4)#返回的是一个对象#2解析返回的报头获得字节数总长信息obj_truple struct.unpack(i,header)#返回的是一个元组total_size obj_truple[0]#取元组第一个元素即为总字节数#3接收真实的命令执行结果信息recv_size 0data bwhile recv_size total_size:recv_data phone.recv(1024)#接收小于1024bytes的数据recv_size len(recv_data)data recv_dataprint(服务器返回来的数据,data.decode(gbk))#5、关闭套接字phone phone.close()
http://www.zqtcl.cn/news/95783/

相关文章:

  • 越秀网站建设优化呼和浩特住房和城乡建设部网站
  • 河南省路桥建设集团网站建网站公司郑州
  • 海沧做网站深圳外贸招聘
  • 网站建设置顶多少钱翻译成英文
  • 柳州正规网站制作公司哪家好怎么学好网站建设
  • 德宏做网站网站的设计思路范文
  • 自己的电脑做网站服务器深圳福田有什么好玩的地方
  • 奕腾网站建设上海十大装修公司排名榜单
  • 简述建设一个网站的基本步骤wordpress欢迎新会员
  • 国外医疗网站模板wordpress主题 科技
  • 海淀企业型网站建设wordpress自定义帖子链接
  • 自己的网站怎么优化做网页的
  • dw设计一个简单网站网页微信版文件传输
  • 网站地图怎么做XML宁波网站建设服务提供商
  • 中石化两学一做网站获取网站域名
  • 吉林长春火车站官网湖北葛洲坝建设工程网站
  • 重庆网站推广服务广告公司女员工深夜兼职
  • 网站的要素是什么wordpress框架解密_day3
  • 抽奖怎么做网站彩页设计公司
  • 推广网站文案素材lamp环境wordpress
  • 合肥网站建设公司 推荐百度下载安装2021
  • 沈阳网站备案照相离婚证app制作软件
  • 唯品会一家做特卖的网站 分析那些网站可以做反链
  • 百度网站排名查询工具网站标签怎么做
  • 如何用ps做网站导航一个网站开发时间
  • 合肥城乡建设网站06628 网页制作与网站建设
  • 网站设计岗位的职责与要求北京网站建设 合一
  • 网站制作app开发公司网站建设 英文
  • 毕业设计网页制作网站建设网站预约挂号怎么做
  • 河东天津网站建设永州做网站的公司