当前位置:首页 > 技术 > 正文内容

Python3 网络通信实战指南

访客 技术 2026年7月19日 1

核心概念与基础架构

Python 提供了完整的网络编程能力,涵盖底层套接字操作和高层连接管理。通过 socket 模块,开发者可构建跨设备的通信系统,支持 TCP 与 UDP 协议。

套接字创建与配置

使用 socket.socket() 初始化通信端点,参数定义通信方式:

  • 地址族(family):通常为 AF_INET(IPv4)或 AF_INET6(IPv6)
  • 类型(type)SOCK_STREAM 表示面向连接的流式传输(TCP),SOCK_DGRAM 代表无连接的数据报(UDP)
  • 协议(proto):默认为 0,由系统自动选择对应协议

关键操作方法概览

方法用途
bind((host, port))将套接字绑定到指定主机与端口
listen(backlog)启动监听模式,允许最大 backlog 个等待连接
accept()接收客户端连接,返回新会话对象与客户端信息
connect((host, port))主动发起与远程服务的连接
recv(buffer_size)读取指定大小的数据块,适用于 TCP
send(data)发送数据,返回实际发送字节数
sendall(data)确保全部数据发送成功,失败时抛出异常
close()关闭当前连接资源
settimeout(seconds)设置操作超时时间,防止无限阻塞

典型应用实例

服务器端实现

# server.py
import socket

# 建立基于 IPv4 与 TCP 的通信通道
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 绑定本地回环地址与固定端口
server_socket.bind(('127.0.0.1', 8888))

# 启动监听,最多维护 5 个待处理连接
server_socket.listen(5)

print("服务已启动,等待客户端接入...")

while True:
    client_conn, client_addr = server_socket.accept()
    print(f"新连接来自: {client_addr}")

    response_msg = "欢迎访问学习平台!\n"
    client_conn.send(response_msg.encode('utf-8'))

    client_conn.close()

客户端连接程序

# client.py
import socket

# 创建用于连接的套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 连接到服务器
client_socket.connect(('127.0.0.1', 8888))

# 接收响应内容
received_data = client_socket.recv(1024)
print("收到消息:", received_data.decode('utf-8'))

# 关闭连接
client_socket.close()

运行流程演示

  1. 在终端中启动服务端:
    $ python3 server.py
  2. 在另一个终端执行客户端:
    $ python3 client.py
  3. 预期输出结果:
    客户端显示:`收到消息: 欢迎访问学习平台!`
    服务端控制台输出:`新连接来自: ('127.0.0.1', 54321)`

常用网络协议支持模块

Python 内置多个高级网络模块,简化常见任务:

协议用途标准端口对应模块
HTTP网页请求与响应80http.client, urllib
FTP文件上传下载21ftplib
SMTP邮件发送25smtplib
POP3接收邮件110poplib
IMAP4邮箱同步与检索143imaplib
Telnet远程命令行交互23telnetlib

上述模块可直接调用,无需手动处理底层网络细节,显著提升开发效率。

标签: PythonSocketTCP

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。