【Python网络开发-黏包问题(二)黏包问题的成因】

22_黏包问题的成因

一、理论回顾

1、黏包的三种成因

(1)当单个数据包较小是接收方可能一次性读取了多个包的数据

(2)当整体数据较大是接收方可能一次仅读取了一个包的一部分内容

(3)TCP协议为了提高效率,会将数据较小且发送间隔较短的数据合并发送,该机制会导致发送方将两个数据包粘在一起发送

二、实操案例

1、代码截图

  • 服务器端
    在这里插入图片描述
  • 客户端
    在这里插入图片描述

2、运行情况

  • 客户端

发送消息成功,无回复

  • 服务器端
    在这里插入图片描述

源代码

1、服务器端

# -*- coding:utf-8 -*-

#粘包问题2:接收方的粘包问题

import socket
import time

server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

server_socket.bind(('',9099))

server_socket.listen(5)

new_socket,client_addr = server_socket.accept()

print('连接成功',client_addr)

data1 = new_socket.recv(3) #第一次没有接受完整
print("第一个数据包",data1)
time.sleep(6)
data2 = new_socket.recv(10) #第二次会接受旧数据,然后如果还有空间在接受新数据
print("第二个数据包",data2)

new_socket.close()
server_socket.close()

2、客户端

# -*- coding:utf-8 -*-

#接收方可能出现的黏包问题

from socket import *

client_socket = socket(AF_INET,SOCK_STREAM)

client_socket.connect(('192.168.1.13',9099))

client_socket.send('hello'.encode('utf-8'))
client_socket.send('tengtongxue'.encode('utf-8'))

client_socket.close()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值