MST

星途 面试题库

面试题:Python中TCP套接字与UDP套接字在适用场景上的主要区别

请阐述在Python编程中,TCP套接字和UDP套接字通常分别适用于哪些场景,它们在这些场景应用中的主要特点是什么,试举例说明。
15.7万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试

TCP套接字

  • 适用场景:适用于对数据准确性要求高、数据传输完整性至关重要的场景,如文件传输、电子邮件、网页浏览(HTTP协议基于TCP)、数据库连接等。
  • 主要特点
    • 面向连接:在数据传输前,需要通过三次握手建立可靠的连接。
    • 可靠传输:通过序列号、确认应答、重传机制等保证数据准确无误且按顺序到达。
    • 有流量控制和拥塞控制:避免发送方发送数据过快导致接收方处理不过来,以及网络拥塞。
  • 举例:使用Python的socket模块实现简单的文件传输服务器和客户端。服务器端监听指定端口,客户端连接服务器后,发送文件名和文件内容,服务器接收并保存文件。
import socket

# 服务器端
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('127.0.0.1', 8888))
server_socket.listen(1)

while True:
    conn, addr = server_socket.accept()
    file_name = conn.recv(1024).decode('utf-8')
    with open(file_name, 'wb') as f:
        while True:
            data = conn.recv(1024)
            if not data:
                break
            f.write(data)
    conn.close()


# 客户端
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('127.0.0.1', 8888))
file_name = 'test.txt'
client_socket.send(file_name.encode('utf-8'))
with open(file_name, 'rb') as f:
    while True:
        data = f.read(1024)
        if not data:
            break
        client_socket.send(data)
client_socket.close()

UDP套接字

  • 适用场景:适用于对实时性要求高、对数据准确性要求相对较低的场景,如视频流传输、音频流传输(如VoIP)、在线游戏等。
  • 主要特点
    • 无连接:无需建立连接,直接发送数据,减少了建立连接的开销和延迟。
    • 不可靠传输:不保证数据一定能到达,也不保证数据的顺序。
    • 传输效率高:没有复杂的确认、重传等机制,速度快。
  • 举例:使用Python的socket模块实现简单的UDP聊天程序,两个程序分别作为发送端和接收端,相互发送和接收消息。
import socket

# 接收端
recv_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
recv_socket.bind(('127.0.0.1', 9999))

while True:
    data, addr = recv_socket.recvfrom(1024)
    print(f"收到来自 {addr} 的消息: {data.decode('utf-8')}")


# 发送端
send_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
while True:
    msg = input("请输入要发送的消息: ")
    send_socket.sendto(msg.encode('utf-8'), ('127.0.0.1', 9999))