Python笔记 UDP 黏包

本文主要介绍了UDP协议的特点,如数据之间的边界明确、传输速度快但可能存在丢包问题。同时,探讨了UDP黏包的现象及其原因,分析了在发送端和接收端可能出现黏包的情况。还提到了在实时通讯中解决黏包的方法,如设定固定消息长度或使用时间间隔。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:   

上节课逃课了做的简单笔记复习见:  http://t.csdn.cn/5zbB6  这节课打算逃课,被我们的可爱的琪琪拦下了

目录   (目录没搞好将就一下下啦)

  • UDP
  • 小案例  : CMD
  • 黏包
  • 解决黏包方法:

一.1.1 UDP

老套路了,还是详情见 : UDP_百度百科

协议:

  • udp协议:
    优点 : 接收时候数据之间有边界,传输速度快,不黏包
    缺点 : 限制数据包的大小(受带宽路由器等因素影响),传输不稳定,可能丢包

话不多说直接上

#服务端
import socket

# 1.创建udp对象
sk = socket.socket(type=socket.SOCK_DGRAM)

# 2.绑定地址和端口
sk.bind(("127.0.0.1", 9000))

while True:
    # 3.udp服务器,在一开始只能够接收数据?
    msg, cli_addr = sk.recvfrom(1024)
    print(msg.decode('utf-8'))
    print(cli_addr)

    # 发送消息
    msg1 = input("服务端给客户端发送的消息是?:")
    sk.sendto(msg1.encode('utf-8'), cli_addr)

# 4.关闭连接
sk.close()
#客户端
import socket

# 1. 创建udp对象
cl = socket.socket(type=socket.SOCK_DGRAM)

while 1:
    # 2.发送数据  sendto(消息,(ip+port))
    msg = input("客户端给服务端发送消息是?:")
    cl.sendto(msg.encode('utf-8'), ("127.0.0.1", 9000))

    # 接收消息
    msg1, server_addr = cl.recvfrom(1024)
    print(msg1.decode('utf-8'))
    print(server_addr)
# 3.关闭连接
cl.close()
#客户端1
import socket

# 1. 创建udp对象
cl = socket.socket(type=socket.SOCK_DGRAM)

while 1:
    # 2.发送数据  sendto(消息,(ip+port))
    msg = input("客户端给服务端发送消息是?:")
    cl.sendto(msg.encode('utf-8'), ("127.0.0.1", 9000))

    # 接收消息
    msg1, server_addr = cl.recvfrom(1024)
    print(msg1.decode('utf-8'))
    print(server_addr)
# 3.关闭连接
cl.close()

注意,这里如果加一个客户端的话会有什么现象.

答:如果以上内容加一个客户端1服务端会出现回复上一个客户端的信息

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值