全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

python网络编程调用recv函数完整接收数据的三种方法

最近在使用python进行网络编程开发一个通用的tcpclient测试小工具。在使用socket进行网络编程中,如何判定对端发送一条报文是否接收完成,是进行socket网络开发必须要考虑的一个问题。这里,简要介绍一下判别数据接收接收完成常用的三种方法:

1.基础数据接收法:

使用基础数据接收法时,当与服务socket断开连接时,会接收到空字符串。因此,可以根据此特点,在程序中加入循环,一直接收数据,直到数据发送端关闭socket连接。适用场景:客户端和服务器的链接为短链接(即一次socket通讯后连接就会关闭)。代码如下:

import socket,struct,sys,time
Port=22220
#assume a socket disconnect (data returned is empty string) means all data was #done being sent.
def recv_basic(the_socket):
 total_data=[]
 while True:
  data = the_socket.recv(20480) 
  if not data: break
  total_data.append(data)
 return ''.join(total_data)

2.尾标识方法

通过寻找接收的协议数据中的尾标识字符串,获取完整的数据的数据报文。适用场景:接收的协议数据中包含相关的尾标识。代码如下:

End='something useable as an end marker'
def recv_end(the_socket):
 total_data=[];data=''
 while True:
   data=the_socket.recv(8192)
   if End in data:
    total_data.append(data[:data.find(End)])
    break
   total_data.append(data)
   if len(total_data)>1:
    #check if end_of_data was split
    last_pair=total_data[-2]+total_data[-1]
    if End in last_pair:
     total_data[-2]=last_pair[:last_pair.find(End)]
     total_data.pop()
     break
 return ''.join(total_data)

3.负载长度方法

即通过协议数据中的负载长度值,确定有效报文的长度,适用场景:协议数据中包含负载协议字段。这种方法也是比较常用和通用的一种方法,但是需要一边接收数据一边解析数据。代码如下: 

def recv_size(the_socket):
 #data length is packed into 4 bytes
 total_len=0;total_data=[];size=sys.maxint
 size_data=sock_data='';recv_size=8192
 while total_len<size:
  sock_data=the_socket.recv(recv_size)
  if not total_data:
   if len(sock_data)>4:
    size_data+=sock_data
    size=struct.unpack('>i', size_data[:4])[0]
    recv_size=size
    if recv_size>524288:recv_size=524288
    total_data.append(size_data[4:])
   else:
    size_data+=sock_data
  else:
   total_data.append(sock_data)
  total_len=sum([len(i) for i in total_data ])
 return ''.join(total_data)

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!


# python 接收数据  # recv接收数据不完整  # 就会  # 三种  # 一个问题  # 可以根据  # 介绍一下  # 小工具  # 编程开发  # 客户端  # 网络编程  # 网络开发  # 这种方法  # 必须要  # 空字符串  # data  # Port  # time  # disconnect  # assume  # means  # def 


相关文章: 教育培训网站制作流程,请问edu教育网站的域名怎么申请?  如何基于云服务器快速搭建个人网站?  如何选择香港主机高效搭建外贸独立站?  如何在Windows服务器上快速搭建网站?  怀化网站制作公司,怀化新生儿上户网上办理流程?  如何在阿里云虚拟主机上快速搭建个人网站?  如何在建站主机中优化服务器配置?  一键制作网站软件下载安装,一键自动采集网页文档制作步骤?  潮流网站制作头像软件下载,适合母子的网名有哪些?  建设网站制作价格,怎样建立自己的公司网站?  广平建站公司哪家专业可靠?如何选择?  早安海报制作网站推荐大全,企业早安海报怎么每天更换?  如何在万网ECS上快速搭建专属网站?  网站制作价目表怎么做,珍爱网婚介费用多少?  seo网站制作优化,网站SEO优化步骤有哪些?  太平洋网站制作公司,网络用语太平洋是什么意思?  打鱼网站制作软件,波克捕鱼官方号怎么注册?  广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?  商务网站制作工程师,从哪几个方面把握电子商务网站主页和页面的特色设计?  外贸公司网站制作哪家好,maersk船公司官网?  如何零基础在云服务器搭建WordPress站点?  济南网站建设制作公司,室内设计网站一般都有哪些功能?  公众号网站制作网页,微信公众号怎么制作?  ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?  Python如何创建带属性的XML节点  建站之星后台密码遗忘或太弱?如何重置与强化?  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  如何在建站宝盒中设置产品搜索功能?  移民网站制作流程,怎么看加拿大移民官网?  如何在新浪SAE免费搭建个人博客?  网站建设制作、微信公众号,公明人民医院怎么在网上预约?  寿县云建站:智能SEO优化与多行业模板快速上线指南  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  香港网站服务器数量如何影响SEO优化效果?  制作网站的模板软件,网站怎么建设?  网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?  教学网站制作软件,学习*后期制作的网站有哪些?  建站主机与服务器功能差异如何区分?  如何通过智能用户系统一键生成高效建站方案?  公司网站制作费用多少,为公司建立一个网站需要哪些费用?  如何通过老薛主机一键快速建站?  齐河建站公司:营销型网站建设与SEO优化双核驱动策略  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  如何获取免费开源的自助建站系统源码?  微课制作网站有哪些,微课网怎么进?  七夕网站制作视频,七夕大促活动怎么报名?  网站制作公司,橙子建站是合法的吗?  如何在西部数码注册域名并快速搭建网站?  网站好制作吗知乎,网站开发好学吗?有什么技巧?  佛山网站制作系统,佛山企业变更地址网上办理步骤? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。