当前位置:首页>python>Python开发从零开始-48.6-网络编程

Python开发从零开始-48.6-网络编程

  • 2026-10-11 06:41:23
Python开发从零开始-48.6-网络编程

接上文Python开发从零开始-48.5-网络编程,本文小编与大家分享 Python 网络编程的相关知识。

(3)使用 socket 模块进行 UDP 通信

代码示例将分为服务器端脚本和客户端脚本两个部分。

1)服务器端脚本(udp_server_socket.py)

import socketimport time# 创建服务器端 UDP socket 对象udp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 绑定地址和端口udp_server_socket.bind(("127.0.0.1", 10001))print(f"UDP 服务器已启动")try:    while True:        # 接收数据 (最多 1024 字节) 和客户端地址        data, client_addr = udp_server_socket.recvfrom(1024)        print(f"收到来自客户端{client_addr} 的消息: {data.decode()}")             response = f"服务器端已收到客户端{client_addr}发送来的信息:{data.decode()}"        # 向该客户端发送响应        udp_server_socket.sendto(response.encode(), client_addr)        # 设置休眠时间(注意时间需略长),使程序能够接受键盘输入        time.sleep(5)# 当终端运行Python 程序时,使用 Ctrl + C 组合键,将触发 KeyboardInterrupt 异常      except KeyboardInterrupt:      print("服务器关闭")finally:    udp_server_socket.close()

上面服务器端脚本中使用的 socket 对象的常用方法简单介绍如下:

  • socket.recvfrom(len) 方法:接收指定长度(len)的 UDP 数据,与 socket.recv() 方法类似,但返回值是一个元组(data, address)。其中 data 是包含接收数据的字符串,address 是发送数据的元组(host, post);

  • socket.sendto(data,addr) 方法:发送 UDP 数据,将数据发送到指定 socket,addr是形式为(host,port)的元组,指定远程地址。返回值是发送的字节数。

2)客户端脚本(udp_client_socket.py)

import socket# 创建客户端 UDP socket 对象udp_client_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 保存服务器端地址和端口server_addr = ("127.0.0.1", 10001)try:    message = "【你好!这是来自客户端的 UDP 消息】"    # 直接发送数据到服务器端    udp_client_sock.sendto(message.encode(), server_addr)    # 接收服务器端响应    data, s_addr = udp_client_sock.recvfrom(1024)    print(f"{data.decode()}")finally:    udp_client_sock.close()

3)使用终端分别运行服务器端脚本(udp_server_socket.py)和客户端脚本(udp_client_socket.py)

① 客户端脚本运行结果如下

② 服务器端脚本运行结果如下

3、socket 模块使用注意事项

(1)注意异常处理

在使用 socket 模块时,网络操作可能会失败(特别是 TCP 通信时),例如因为网络中断、服务器不可用等原因。因此,需要使用 try...except 块来捕获并处理。常见异常包括:

  • socket.timeout,在使用 socket 模块进行网络通信时,若连接或读取数据超出设定的时间限制,就会抛出 socket.timeout 异常。这通常是由于网络延迟、目标服务器无响应或超时时间设置过短导致;

  • socket.error,表示在使用 socket 模块进行网络通信时出现了问题,例如权限不足、端口被占用或连接超时等;

  • ‌KeyboardInterrupt,它是 Python 中的内置异常,当终端运行程序时,用户按下 Ctrl+C 中断程序时触发‌。注意在程序进入无限循环(如 while True)或处理大量数据时,需显式对程序进行短暂休眠,否则无法接收终端输入。

(2)关闭 Socket 连接

当使用完 socket 后,应该始终关闭它,否则可能导致资源泄露。

(3)设置网络超时时间

在网络编程中,应设置一个合理的超时时间,以避免无限期地等待服务器响应。可以使用 socket 对象的 settimeout() 方法来设置超时时间,通常应该在刚创建 socket 对象时设置,因为可能用于连接的操作。

(4)数据传输的安全性

‌应避免明文传输敏感信息‌,建议采用 ssl 模块提供的 SSL/TLS(安全套接层/传输层安全协议)功能来加密数据传输。

(5)并发处理

使用 socket 模块进行网络编程时,特别是在处理 TCP 连接时,通常会遇到同时处理多个客户端连接问题。如果需要在单进程内同时处理多个客户端连接,可以使用 socket 模块结合 asyncio 模块来以非阻塞的方式处理网络通信。

(6)多线程处理

在实际应用中,为了提高性能和健壮性,通常会采用多线程或多进程来处理多个客户端连接。例如,可以使用 threading 模块为每个客户端连接创建一个新线程。

受文章篇幅所限,下文将继续介绍 Python 网络编程的相关知识。

最新文章

随机文章