MST

星途 面试题库

面试题:网络编程之Python Socket中等难度题

在Python的Socket编程中,简述TCP和UDP套接字创建和使用的主要区别,并分别给出一个简单示例代码实现服务器端接收数据的功能。
19.1万 热度难度
后端开发网络编程

知识考点

AI 面试

面试题答案

一键面试

TCP和UDP套接字创建和使用的主要区别

  1. 连接特性
    • TCP:面向连接的协议,在通信开始前需要通过三次握手建立可靠连接,通信结束后需要四次挥手断开连接。这确保了数据的有序性和可靠性。
    • UDP:无连接协议,发送数据前不需要建立连接,直接将数据报发送出去,不保证数据的有序性和可靠性,但传输速度快,适合对实时性要求高但对数据准确性要求相对较低的场景,如视频流、音频流传输。
  2. 数据传输可靠性
    • TCP:通过校验和、重传机制等保证数据传输的可靠性,若数据丢失或出错,会自动重传。
    • UDP:不提供可靠性保障,数据可能会丢失、重复或乱序到达。
  3. 数据边界
    • TCP:是字节流协议,没有数据边界,数据在传输过程中可能会被分割或合并。应用层需要自己处理数据边界问题。
    • UDP:是数据报协议,有明确的数据边界,每个UDP数据报都是独立的,接收方每次接收的是完整的数据报。
  4. 传输效率
    • TCP:由于要保证可靠性,有连接建立、重传等开销,传输效率相对较低。
    • UDP:无连接建立和重传等开销,传输效率高。

TCP服务器端接收数据示例代码

import socket

# 创建TCP套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定地址和端口
server_socket.bind(('127.0.0.1', 12345))
# 监听连接
server_socket.listen(1)
print('等待客户端连接...')

# 接受客户端连接
conn, addr = server_socket.accept()
print(f'与 {addr} 建立连接')

# 接收数据
data = conn.recv(1024)
print(f'接收到数据: {data.decode()}')

# 关闭连接
conn.close()
server_socket.close()

UDP服务器端接收数据示例代码

import socket

# 创建UDP套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 绑定地址和端口
server_socket.bind(('127.0.0.1', 12345))
print('等待接收数据...')

# 接收数据
data, addr = server_socket.recvfrom(1024)
print(f'从 {addr} 接收到数据: {data.decode()}')

# 关闭套接字
server_socket.close()