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

dedecms网站空白wordpress主动提交

dedecms网站空白,wordpress主动提交,外贸网站建设视频,微网站平台怎样做网站粘包现象解决方案、socketserver实现并发 文章目录 粘包现象解决方案、socketserver实现并发一、粘包现象解决方案1.发送数据大小2.发送数据信息 二、socketserver实现并发1.tcp版的socketserver并发2.udp版的socketserver并发 一、粘包现象解决方案 1.发送数据大小 有了上一…粘包现象解决方案、socketserver实现并发 文章目录 粘包现象解决方案、socketserver实现并发一、粘包现象解决方案1.发送数据大小2.发送数据信息 二、socketserver实现并发1.tcp版的socketserver并发2.udp版的socketserver并发 一、粘包现象解决方案 1.发送数据大小 有了上一篇文章的分析我们知道tcp协议之所以会出现粘包现象是因为无法得知每次传输的字节数。如果我们人为的给传输的数据添加一个报头用来表示接收内容的字节数就可以解决这个问题了。 #服务端 from socket import * import subprocess import structserversocket(AF_INET,SOCK_STREAM) server.bind((127.0.0.1,8080)) server.listen(5)while True:conn,client_addrserver.accept()while True:try:cmdconn.recv(1024)if len(cmd) 0:breakobjsubprocess.Popen(cmd.decode(utf-8),shellTrue,stderrsubprocess.PIPE,stdoutsubprocess.PIPE)stdoutobj.stdout.read()stderrobj.stderr.read()#1、制作报头固定长度total_sizelen(stdout) len(stderr)#struct模块可以将一个数据类型转为固定长度的bytesheaderstruct.pack(i,total_size)#2、发送固定长度的报头conn.send(header)#3、发送真实的数据conn.send(stdout)conn.send(stderr)except ConnectionResetError:breakconn.close()#客户端 from socket import * import structclientsocket(AF_INET,SOCK_STREAM) client.connect((127.0.0.1,8080))while True:cmdinput(: ).strip()if len(cmd) 0:continueclient.send(cmd.encode(utf-8))#1、接收固定长度的报头(bytes)headerclient.recv(4)#从报头中解析接收内容的字节数total_sizestruct.unpack(i,header)[0]#2、接收真实的数据#recv_size表示已接收字节数total_size表示总的字节数recv_size0resbwhile recv_size total_size :dataclient.recv(1024)resdatarecv_sizelen(data)print(res.decode(gbk))接收结果 映像名称 PID 会话名 会话# 内存使用 System Idle Process 0 Services 0 8 K System 4 Services 0 152 K (接收内容过长中间部分略去) tasklist.exe 16076 Console 1 9,520 K WmiPrvSE.exe 15416 Services 0 10,212 K 2.发送数据信息 在一般的文件传输中我们除了可以看到文件的大小还可以看见文件名称创建日期当信息为了将这些信息加入到报头中我们可以将上面的代码进一步优化为如下形式 #服务端 from socket import * import subprocess import struct import json,timeserversocket(AF_INET,SOCK_STREAM) server.bind((127.0.0.1,8080)) server.listen(5)while True:conn,client_addrserver.accept()while True:try:cmdconn.recv(1024)if len(cmd) 0:break# 运行系统命令objsubprocess.Popen(cmd.decode(utf-8),shellTrue,stderrsubprocess.PIPE,stdoutsubprocess.PIPE)stdoutobj.stdout.read()stderrobj.stderr.read()#将报头信息制作成字典header_dic{filename:tasklist,total_size:len(stdout) len(stderr),create_time:time.strftime(%Y-%m-%d %H)}#通过json格式将报头字典转为bytesheader_jsonjson.dumps(header_dic)header_bytesheader_json.encode(utf-8)#由于报头字典大小超出struct的限制所以此处先发送4个字节标识报头字典的大小#1、发送报头字典大小conn.send(struct.pack(i,len(header_bytes)))#2、发送报头字典conn.send(header_bytes)#3、发送真实的数据conn.send(stdout)conn.send(stderr)except ConnectionResetError:breakconn.close()#客户端 from socket import * import struct import jsonclientsocket(AF_INET,SOCK_STREAM) client.connect((127.0.0.1,8080))while True:cmdinput(: ).strip()if len(cmd) 0:continueclient.send(cmd.encode(utf-8))#1、收4个字节这4个字节表示报头长度header_lenstruct.unpack(i,client.recv(4))[0]#2、再接收报头header_bytesclient.recv(header_len)#通过json解析出报头字典header_jsonheader_bytes.decode(utf-8)header_dicjson.loads(header_json)print(header_dic)total_sizeheader_dic[total_size]#3、接收真实的数据recv_size0resbwhile recv_size total_size :dataclient.recv(1024)resdatarecv_sizelen(data)print(res.decode(gbk))可以看到结果中接收到了报头信息 {‘filename’: ‘tasklist’, ‘total_size’: 17942, ‘create_time’: ‘2024-10-18 18’} 映像名称 PID 会话名 会话# 内存使用 System Idle Process 0 Services 0 8 K System 4 Services 0 152 K (接收内容过长中间部分略去) tasklist.exe 16076 Console 1 9,520 K WmiPrvSE.exe 15416 Services 0 10,212 K 二、socketserver实现并发 1.tcp版的socketserver并发 #客户端 import socket #表示当前开启的客户端序号 #并发通信时可以开启斗个客户端与服务端通信 num33 phonesocket.socket(socket.AF_INET,socket.SOCK_STREAM) phone.connect((127.0.0.1,8080)) while True:msg client%s%numif len(msg) 0:continuephone.send(msg.encode(utf-8))dataphone.recv(1024)print(data)phone.close()#服务端 import socketserver #MyHandler为自定义的通信函数 class MyHandler(socketserver.BaseRequestHandler):#MyHandler继承了abc类必须复写handle函数def handle(self):#通信循环while True:try:#self.request中存放这通信连接#self.client_address中存放着客户端的ip和端口号#self.server中存放着套接字对象dataself.request.recv(1024)if len(data) 0:breakself.request.send(data.upper())except ConnectionResetError:breakif __name__ __main__:#创建socketserver对象ssocketserver.ThreadingTCPServer((127.0.0.1,8080),MyHandler,bind_and_activateTrue)#serve_forever函数在有客户端发送请求时创建一个线程#这个线程会根据建立的通信链接与客户端通信(创建MyHandler对象并调用handle方法)s.serve_forever()2.udp版的socketserver并发 #客户端 import socket num33 clientsocket.socket(socket.AF_INET,socket.SOCK_DGRAM) while True:msgclient%s%numclient.sendto(msg.encode(utf-8),(127.0.0.1,8080))data,server_addrclient.recvfrom(1024)print(data)client.close()#服务端 import socketserver class MyHandler(socketserver.BaseRequestHandler):def handle(self):# 通信循环#self.request[1]存放着套接字对象#self.client_address存放着客户端的信息#self.request[0]存放着客户端发送的信息data self.request[0]self.request[1].sendto(data.upper(), self.client_address)if __name__ __main__:s socketserver.ThreadingUDPServer((127.0.0.1, 8080), MyHandler)#当客户端发送信息以后serve_forever函数会创建一个线程与客户端进行通信s.serve_forever()
http://www.hkea.cn/news/14520012/

相关文章:

  • 制作网站服务公司如何选择做网站公司
  • 个人网站建设yxhuying软件培训内容怎么写
  • 鞍山百度网站怎么制作龙游发布紧急提示
  • 龙岗网站设计案例免费建站模板哪个好
  • 网站后台图片上传大小上海比较有名的室内设计公司
  • 建站排名泉州那家做网站公司好
  • 购物网站开发的意义和目的陕西旭泽建设有限公司网站
  • 环保设备网站建设方案visual studio网站开发
  • 网站建设公司小猫建站上海公司注册公司
  • 白菜网站建设林州网站建设哪家便宜
  • 邵阳网站制作杞县网站建设
  • 中国网站制作公司排名在线logo
  • 域名注册网站查询中国互联网中心官网
  • js网站跳转代码做网站怎么存放视频
  • 看p站用什么浏览器wordpress进管理员
  • 什么可以放置网站内容平湖市住房建设局网站
  • 一个网站建设的目标中国进入一级战备2023
  • 网站样式模板下载重庆的网站建设
  • 苏州企业网站建站wordpress插件 2017
  • 动漫网站建站目的视频网站建设要多少钱
  • 诸暨市住房和建设局网站个人网站设计模板下载
  • 设计师个人网站欣赏 中国旅游网站建设的背景
  • 做网站用lunx建设网站网页打不开
  • 学院网站建设时间控制变更申请表做网站常用的英文字体
  • 有个网站301什么网页游戏折扣充值平台
  • 了解网站建设海口模板建站公司
  • 从事网站类网站建设的个人简历在线填写电子版
  • html5做音乐网站广州做网页的公司
  • 网站开发语言有哪些盐城网站设计公司
  • 上海网站建设上海迈歌行情软件排行榜前十名