📜  用户数据报协议 (UDP)(1)

📅  最后修改于: 2023-12-03 14:56:23.502000             🧑  作者: Mango

用户数据报协议 (UDP)

简介

用户数据报协议 (UDP, User Datagram Protocol) 是一种简单的无连接的传输层协议,它不保证数据的可靠传输。UDP 通常用于实时通信、流媒体和在线游戏等应用场景,由于传输效率高,因此在一些对数据可靠性要求不高的应用中得到广泛应用。

特点
  • 无连接:数据发出后将无法得到确认,也不保证传输顺序,数据包可能会丢失或重复。
  • 快速:与 TCP 不同,UDP 不需要建立连接,在传输数据时不需要等待确认,因此传输速度更快。
  • 简单:UDP 的头部很小,只有 8 个字节,相比之下 TCP 的头部有 20 个字节。
  • 不可靠:由于 UDP 不进行错误检测和重发机制,它不太适合传输大量需要完整性和可用性保障的数据。
用途

UDP 常用于实时传输数据的场景,例如:

  • 视频、音频流媒体
  • 实时游戏
  • DNS 查询
  • NTP 时间同步
代码示例

Python 实现 UDP 客户端和服务器:

服务器 ( server.py )
import socket

server_address = ('localhost', 5555)

# 创建套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 绑定服务器地址
sock.bind(server_address)

print('UDP 服务器已启动...')

while True:
    # 接收消息
    data, address = sock.recvfrom(1024)
    print(f"接收到来自 {address} 的消息:{data.decode()}")

    # 发送消息
    message = input('请输入要发送的消息:')
    sock.sendto(message.encode(), address)
客户端 ( client.py )
import socket

server_address = ('localhost', 5555)

# 创建套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

while True:
    # 发送消息
    message = input('请输入要发送的消息:')
    sock.sendto(message.encode(), server_address)

    # 接收消息
    data, address = sock.recvfrom(1024)
    print(f'接收到来自服务器 {address} 的消息:{data.decode()}')

以上代码实现了一个简单的 UDP 服务器和客户端,可以进行双向通信。需要注意的是,UDP 支持广播和多播,因此可以广播和多播数据报。