python 客户端 与服务端粘包处理问题

这里是我的源代码: 各位大神如果有错误的地方请指正,。。

import socket
import struct
"""
或许你想了解关于 Python 中 struct 模块的函数。struct 模块允许你以一种字节安全的方式打包和解包数据。以下是一些常用函数:

pack(format, v1, v2, ...):
这个函数将数据按照指定的格式 format 打包成一个字符串(字节流)。例如:struct.pack('I', 123) 将整数 123 打包成一个 4 字节的字符串,格式为无符号整数。

unpack(format, string):
这个函数从字节流中解包数据,按照给定的格式 format 进行解析。例如:struct.unpack('I', b'\x00\x00\x00\x7b') 将 4 字节的字节流转换为对应的整数。

calcsize(format):
返回给定格式字符串所需的字节数。例如:struct.calcsize('I') 将返回一个无符号整数所占的字节数。

pack_into(format, buffer, offset, v1, v2, ...):
将数据按照格式 format 打包到缓冲区 buffer 的指定偏移量 offset 处。例如:struct.pack_into('I', buf, 0, 123) 将整数 123 打包到缓冲区 buf 的开头。

unpack_from(format, buffer, offset=0):
从指定偏移量 offset 处开始,从缓冲区 buffer 中按照格式 format 解包数据。例如:struct.unpack_from('I', buf, 0) 将从缓冲区 buf 的开头解包一个无符号整数。
"""
sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.bind(("127.0.0.1",10002))
sock.listen(5)

conn,addr= sock.accept()
# 接收头部长度
headerl=conn.recv(4)
date_len=struct.unpack("i",headerl)[0]
#然后把每一块的内容拼接起来
data1=b""

while True:
     #判断每一次接受的内容长度是多少
     length=date_len-len(data1)
     #最大限度长度是1024,
     #就收长度是length的大小,防止粘包
     chunk=conn.recv(min(length,1024))
     #判断每次是否有内容,如果有内容 我就把他拼接起来 ,如果没有没有内容我就推出循环如果有内容我就把内容拼接起来
     if not chunk:
          break
     data1=data1+chunk
     #结束循环的条件是
     if len(data1)==date_len:
          break
print(data1.decode("utf-8"))
conn.close()
sock.close()


  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值