粘包现象_光柱现象

粘包现象_光柱现象粘包现象当多条消息发送时接受变成了一条或者出现接收不准确的情况粘包现象会发生在发送端两条消息间隔时间短,长度短就会把两条消息在发送之前就拼在一起节省每一次发送消息回复的网络资源粘包现象会发生在接收端多条消息发送到缓存端,但没有被及时接收,或者接收的长度不足一次发送的长度数据与数据之间没有边界本质:发送的每一条数据之间没有边界–例:importsocketsk=…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

粘包现象

当多条消息发送时接受变成了一条或者出现接收不准确的情况
粘包现象会发生在发送端
两条消息间隔时间短,长度短 就会把两条消息在发送之前就拼在一起
节省每一次发送消息回复的网络资源

粘包现象会发生在接收端
多条消息发送到缓存端,但没有被及时接收,或者接收的长度不足一次发送的长度
数据与数据之间没有边界

本质 : 发送的每一条数据之间没有边界

– 例:
import socket

sk = socket.socket()
sk.bind(('192.168.12.26',9001))
sk.listen()

conn,addr = sk.accept()
conn.send(b'hello'*300)
conn.send(b'world')

解决粘包

方法1:
server端:
import socket

sk = socket.socket()
sk.bind(('192.168.12.26',9001))
sk.listen()
conn,addr = sk.accept()
msg1 = b'hello'
msg2 = b'world'
len_msg = len(msg1)
str_len = str(len_msg)
proto_len = str_len.zfill(10)
conn.send(proto_len.encode())
conn.send(msg1)

len_msg = len(msg2)
str_len = str(len_msg)
proto_len = str_len.zfill(10)
conn.send(proto_len.encode())
conn.send(msg2)
client端:
import time
import socket

sk = socket.socket()

sk.connect(('192.168.12.26',9001))
for i in range(1000000):2*i
len_msg = sk.recv(10).decode('utf-8')
len_msg = int(len_msg)
msg1 = sk.recv(len_msg)
print(msg1)
len_msg = sk.recv(10).decode('utf-8')
len_msg = int(len_msg)
msg2 = sk.recv(len_msg)
print(msg2)
方法2:
server端:
import struct
import socket

def proto_send(msg):
    msg = msg.encode('utf-8')
    len_msg = len(msg)
    proto_len = struct.pack('i', len_msg)  # 把字节的长度编程4字节,i代表int
    conn.send(proto_len)
    conn.send(msg)

sk = socket.socket()
sk.bind(('192.168.12.26',9001))
sk.listen()

conn,addr = sk.accept()
msg1 = 'hello'
msg2 = 'world'
proto_send(msg1)
proto_send(msg2)

# 计算要发送的数据字节长度
# 把字节的长度编程4字节
# 发送4字节
# 发送数据

# 通过socket的tcp协议上传文件
client端:
import struct
import socket

sk = socket.socket()

def proto_recv():
    len_msg = sk.recv(4)
    len_msg = struct.unpack('i', len_msg)[0]
    msg = sk.recv(len_msg)
    return msg

sk.connect(('192.168.12.26',9001))
for i in range(1000000):2*i
msg1 = proto_recv()
print(msg1)
msg2 = proto_recv()
print(msg2)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/169710.html原文链接:https://javaforall.net

(0)
上一篇 2022年8月11日 上午9:00
下一篇 2022年8月11日 上午9:00


相关推荐

  • 6个月火速炼成千亿参数大模型!背后是披荆斩棘的华为云哥哥们

    6个月火速炼成千亿参数大模型!背后是披荆斩棘的华为云哥哥们6 个月的时间为约定 他们就这样硬生生地打造了个全球领先 华为云盘古大模型 业界首个千亿级生成与理解中文 NLP 大模型 业界最大的 CV 大模型 而在这场攻坚战中 华为云人工智能领域首席科学家田奇和团队成员担起了重担 田奇在学术圈可以说是位老将 但当时的事实却是 他在华为云任职才刚刚满半年 并且面临的还是 首个 最大 级别的挑战 很重要 一定要 啃 下来 这是田奇在心中默默许下的承诺 大模型是趋势 更是必争的高地时间线先拉回到 2018 年 当时的预训练模型

    2026年3月18日
    2
  • css渐变

    css渐变渐变分为两种 一 线性渐变 lineargradie 向下 向上 向左 向右 对角二 径向渐变 radialgradie 由他们的中心定义 1 线性渐变 默认是从上向下变化 name background image linear gradient toright color color 向右变化 也可以将 right 换成其他几个方向哦 或者也可以 righttop 这样就是右上啦 2 径向渐变 name background image

    2026年3月19日
    3
  • Python关于strftime函数详细解析 附实战代码

    Python关于strftime函数详细解析 附实战代码项目中的 pythonweb 中 时间都用到了这个函数深挖了一下基本的知识点以及实战中的书写 Pythontimest 方法以及通过翻阅源码知识 对应进行实战结合 strftime 函数主要是格式化时间 返回当地时间 显示的格式以字符串显示 主要通过 format 决定

    2026年3月18日
    2
  • CXF 性能调优

    CXF 性能调优1 nbsp nbsp 启用 FastInfoset 快速信息集 webservice 的性能实在是不敢恭维 曾经因为 webservice 吞吐量上不去 对 webservice 进行了一些性能方面的优化 采用了 FastInfoset 效果很明显 极端条件下的大数据量传输 性能提高 60 他可以减少传输成本 序列化成本和 xml 解析成本 Cxf 提供了 FastInfoset 协商机制 实现类见 org apache cxf

    2026年3月19日
    2
  • 用Cursor快速开发微信小程序:万字实用指南轻松上手

    用Cursor快速开发微信小程序:万字实用指南轻松上手

    2026年3月16日
    2
  • vim编辑器永久显示行号(linux查看显示行号)

    介绍了ubuntu环境下vim临时显示行号和永久显示行号的设置方法

    2022年4月11日
    129

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号