python中粘包问题的一种解决办法及其相关解决代码详解

        在上一篇文章中,我介绍了粘包的产生,以及相关的解决思路,现在这篇文章给大家介绍一下其中一种解决方法的代码详解。

      关于粘包的解决思路我已经做过了简要介绍啦,就是将文件的大小一并发送到接收端,通过该文件的大小实现对文件的读取和接收。

     首先可以编一个字典,将文件的大小发送到接收端,根据文件的大小设定循环语句对文件进行循环发送,直到发送完文件为止。代码形式如下:

dic={'filename':None,filesize':None}
filename=os.path.basename(file_path) #此处file_path代表的是文件所在的绝对路径
file_size=os.path.getsize(file_path) #此处file_path代表的是文件所在的绝对路径
dic['filename']=filename
dic['filesize']=file_size            #这两句代码则是将字典进行赋值
str_dic=json.dumps(dic)
sk.send(str_dic.encode('utf-8'))     #这两句代码既是将文件的长度信息发送到接收端
sk.recv(1024)                        #这两句代码则是确认收到字典,可以通过其他方法省去这一步 
with open(file_path, 'rb') as file:
    while file_size:
          content=file.read(1024)
          sk.send(content)
          file_size-=len(content)    #with语句下面这一部分则是循环向接收端发送文件信息   


        然后在接收端设定同样的接收方法,循环接收发送端发送过来的文件,直到接收完发送端发送的信息为止。代码形式如下:

str_dic=new_sk.recv(10240).decode('utf-8')
new_sk.send(b'ok')                        #此发送信息为校验接收到字典的信息
dic=json.loads(str_dic)    
with open(filename,'ab') as file:
     while dic['filesize']:                #字典dic为发送端发送过来的字典
         content = new_sk.recv(1024)
         file.write(content)
         dic['filesize']-=len(content)      #此过程为对发送端循环发送的信息进行循环读写

       以上就是一个简单的处理方法啦,其实还有相应的更加优化的算法值得大家去探索哦,通过上述方法,大文件的传输也能尽在掌握哦~

欢迎大家给予更多的指点和指导啦!!!

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值