MST

星途 面试题库

面试题:网络编程之UDP协议特点与Socket应用基础

简述UDP协议的主要特点,并说明在Socket编程中,如何创建一个基于UDP协议的服务器端和客户端,写出关键代码步骤。
19.9万 热度难度
后端开发网络编程

知识考点

AI 面试

面试题答案

一键面试

UDP 协议主要特点:

  1. 无连接:UDP 在数据传输前不需要像 TCP 那样建立连接,发送端直接将数据报发送出去,减少了连接建立和拆除的开销,适合对实时性要求高但对数据准确性要求相对较低的场景,如视频流、音频流传输。
  2. 不可靠:UDP 不保证数据报一定能到达目的地,也不保证数据报的顺序和不重复。它没有重传机制,若数据在传输过程中丢失,不会自动重发。
  3. 面向数据报:UDP 以数据报为单位进行传输,对应用层交下来的报文,不合并也不拆分,保留报文的边界。每次发送一个完整的数据报,接收端也必须以完整的数据报为单位进行接收。
  4. 首部开销小:UDP 首部只有 8 字节,相比 TCP 首部 20 字节(不包含选项字段),开销更小,在传输数据量较小时优势明显。

Socket 编程中基于 UDP 协议的服务器端关键代码步骤(以 Python 为例):

import socket

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

# 绑定 IP 地址和端口号
server_address = ('localhost', 12345)
server_socket.bind(server_address)

print('Server is listening on {}:{}'.format(*server_address))

while True:
    # 接收数据和客户端地址
    data, client_address = server_socket.recvfrom(1024)
    print('Received {} bytes from {}'.format(len(data), client_address))
    print('Data: {}'.format(data.decode('utf - 8')))

    # 发送响应数据
    response = 'Message received successfully!'
    server_socket.sendto(response.encode('utf - 8'), client_address)

Socket 编程中基于 UDP 协议的客户端关键代码步骤(以 Python 为例):

import socket

# 创建 UDP 套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DUDP)

# 服务器地址
server_address = ('localhost', 12345)

# 发送数据
message = 'Hello, server!'
client_socket.sendto(message.encode('utf - 8'), server_address)

# 接收响应数据
data, server_address = client_socket.recvfrom(1024)
print('Received {} bytes from {}'.format(len(data), server_address))
print('Data: {}'.format(data.decode('utf - 8')))

# 关闭套接字
client_socket.close()