当前位置: 首页
编程语言
Python从零开始使用Socket模块实现网络编程入门指南

Python从零开始使用Socket模块实现网络编程入门指南

时间:2026-07-26
转载

使用Python内置socket模块可快速实现网络通信,通过TCP和UDP协议分别演示服务端与客户端的数据收发流程,并强调编码转换、端口绑定、地址配置等注意事项,为网络编程入门提供清晰示例。

聊网络编程,离不开TCP、UDP、IP、端口这些概念,对新手来说确实有点门槛。但核心其实很直观——Socket(套接字),就是网络通信的“钥匙”。无论你是做后端开发、爬虫,还是搞即时通讯,最终都得和它打交道。

这篇文章会用Python标准库里的socket模块,从零搭建一个服务端和客户端的通信示例。不深究底层原理,不涉及复杂框架,跟着代码走一遍,你就能把Socket编程的基本流程搞清楚。

Python使用Socket模块实现网络编程的入门指南

前提是你已经掌握Python基础语法。Python内置的socket模块,无需额外安装,开箱即用。

一、什么是Socket

可以把Socket理解为网络通信的“电话线”,两个程序之间想要互相传数据,就得靠它。一端监听,一端发起连接,通过IP地址和端口号,就能唯一确定一条通信通道。

常用的通信协议有两种:

  1. TCP:面向连接,可靠传输。数据不会丢失,顺序也不会乱。通信前必须先建立连接(三次握手)。文件传输、聊天软件,基本都用TCP。
  2. UDP:无连接,不可靠。无需握手,发送速度快,但可能丢包。直播、语音通话、广播等场景更合适。

Python的socket库支持这两种协议,下面先看TCP怎么用。

二、TCP通信完整示例(重点)

TCP通信的流程很清晰:

  • 服务端:创建socket → 绑定IP和端口(bind) → 开始监听(listen) → 等待连接(accept) → 收发数据
  • 客户端:创建socket → 连接服务端(connect) → 收发数据

2.1 TCP服务端代码 server.py

import socket

# 1. 创建TCP套接字 SOCK_STREAM代表TCP
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 2. 绑定地址与端口,0.0.0.0代表监听本机所有网卡
HOST = "0.0.0.0"
PORT = 8888
server_socket.bind((HOST, PORT))

# 3. 开启监听,参数为允许等待的最大连接数
server_socket.listen(5)
print(f"服务端启动成功,监听端口:{PORT}")

# 4. 循环等待客户端接入
while True:
    # accept()阻塞,直到有客户端连接
    conn, addr = server_socket.accept()
    print(f"新客户端接入:{addr}")

    # 接收客户端数据,缓冲区大小1024字节
    data = conn.recv(1024)
    if not data:
        conn.close()
        continue
    print("收到客户端消息:", data.decode("utf-8"))

    # 向客户端发送响应
    resp = "服务端已收到你的消息!"
    conn.send(resp.encode("utf-8"))

    # 关闭当前客户端连接
    conn.close()

2.2 TCP客户端代码 client.py

import socket

# 创建TCP套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 连接服务端地址
HOST = "127.0.0.1"
PORT = 8888
client_socket.connect((HOST, PORT))

# 发送数据,socket只能传输字节流,字符串需要encode编码
msg = "Hello Socket!"
client_socket.send(msg.encode("utf-8"))

# 接收服务端返回消息
recv_data = client_socket.recv(1024)
print("收到服务端响应:", recv_data.decode("utf-8"))

# 关闭套接字
client_socket.close()

运行测试

  1. 终端先运行服务端:python server.py
  2. 新开终端运行客户端:python client.py

输出效果:

服务端控制台:

服务端启动成功,监听端口:8888

新客户端接入:('127.0.0.1', 51234)

收到客户端消息: Hello Socket!

客户端控制台:

收到服务端响应: 服务端已收到你的消息!

注意几个要点:

  • Socket传输只有bytes字节流,字符串必须用encode()编码,接收后需用decode()解码。
  • 127.0.0.1只能本机访问。想让局域网其他设备连进来,服务端需绑定0.0.0.0,客户端填写服务端的局域网IP。
  • 端口不能被其他程序占用,否则会报OSError。

三、UDP通信示例

UDP不需要建立连接,省去了listen和accept的步骤,收发更轻量,速度也更快。

UDP服务端 udp_server.py

import socket

# SOCK_DGRAM 代表UDP
udp_server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp_server.bind(("0.0.0.0", 9999))
print("UDP服务端启动,端口9999")

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

UDP客户端 udp_client.py

import socket

udp_client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp_client.sendto("UDP测试消息".encode("utf-8"), ("127.0.0.1", 9999))
data, addr = udp_client.recvfrom(1024)
print("服务端回复:", data.decode("utf-8"))
udp_client.close()

四、常见踩坑总结

  1. 编码报错:收发时忘记encode/decode,中文尤其容易乱码。统一用utf-8,别省略。
  2. 端口占用:换个端口,或者关闭占用端口的进程。
  3. 客户端连不上:防火墙拦截、IP写错、服务端没绑定0.0.0.0,逐一排查。
  4. recv阻塞卡死:TCP连接断开后,recv会返回空字节,代码里需加判断。
  5. 单次recv收不全大数据:缓冲区有限,传输大文件要循环接收。

五、进阶拓展方向

原生Socket实现的是点对点短连接通信,后续想玩更复杂的,可以往以下方向走:

  1. 用多线程/多进程处理多个客户端并发连接。
  2. IO多路复用 select / selectors 实现高并发服务。
  3. 基于Socket搭建简易聊天室、文件传输工具。
  4. 封装协议头,自定义通信数据包格式。
  5. 异步网络编程 asyncio socket。
  6. 第三方框架:Twisted、gevent。

结束语

Socket是网络编程的基石,HTTP、WebSocket这些高级协议,底层其实都离不开它。把原生socket模块吃透,再看各种网络框架,底层逻辑会清晰很多。本篇的代码都是最简可运行版本,建议手动敲一遍,跑一遍,理解会更深入。

游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

同类文章
更多
网络安全工程师考证指南:从入门到实战的完整路径

网络安全工程师考证指南:从入门到实战的完整路径

围绕“选证书—补基础—备考与报名—实战验证—避坑进阶”梳理网络安全工程师考证路径,兼顾国内常见认证与国际认证的定位差异,帮助零基础及转行读者明确学习顺序,并把证书准备与真实安全岗位能力结合起来。

时间:2026-10-10 16:26
JupyterLab 进阶配置:从插件管理到环境隔离的完整指南

JupyterLab 进阶配置:从插件管理到环境隔离的完整指南

JupyterLab 的强大不仅在于 Notebook 本身,更在于其可扩展的架构与灵活的工作流。本文深入解析插件机制、内核切换原理及工作区管理策略,提供一套标准化的配置与排查流程。通过理解扩展权限、内核通信机制及布局保存逻辑,开发者能够建立稳定的开发环境,并快速定位插件失效、内核错乱或布局丢失等常

时间:2026-10-10 16:21
MySQL慢查询排查:执行计划与索引优化方法

MySQL慢查询排查:执行计划与索引优化方法

从慢查询定位到执行计划分析,再到索引设计、优化验证与常见误区,系统梳理一套可复用的 MySQL 慢查询排查流程。

时间:2026-10-10 16:16
AI Agent工作原理:工具调用、记忆与任务规划

AI Agent工作原理:工具调用、记忆与任务规划

从一次用户指令出发,拆解AI Agent如何理解目标、规划任务、调用工具、管理记忆并验证结果,帮助读者建立可落地的Agent工作模型,同时识别常见失控与失败原因。

时间:2026-10-10 16:11
Flask项目结构设计:蓝图、配置与扩展管理

Flask项目结构设计:蓝图、配置与扩展管理

从可维护性和可扩展性出发,系统梳理 Flask 项目的结构设计,重点解决蓝图拆分、配置管理、扩展初始化与模块依赖等实际问题,并通过验证与避坑建议帮助读者建立适合中小型项目演进的架构。

时间:2026-10-10 16:06
热门专题
更多
刀塔传奇破解版无限钻石下载大全 刀塔传奇破解版无限钻石下载大全
洛克王国正式正版手游下载安装大全 洛克王国正式正版手游下载安装大全
思美人手游下载专区 思美人手游下载专区
好玩的阿拉德之怒游戏下载合集 好玩的阿拉德之怒游戏下载合集
不思议迷宫手游下载合集 不思议迷宫手游下载合集
百宝袋汉化组游戏最新合集 百宝袋汉化组游戏最新合集
jsk游戏合集30款游戏大全 jsk游戏合集30款游戏大全
宾果消消消原版下载大全 宾果消消消原版下载大全
  • 热门数据榜