0

0

PythonTCPUDP网络编程实战教程_客户端服务器通信项目

舞姬之光

舞姬之光

发布时间:2025-12-31 22:07:51

|

523人浏览过

|

来源于php中文网

原创

python网络编程核心是掌握tcp(可靠连接,如文件上传)与udp(轻量无连接,如视频流)的区别及应用;文中给出了tcp回声服务和udp时间查询的完整可运行代码,并附调试技巧与进阶方向。

pythontcpudp网络编程实战教程_客户端服务器通信项目

Python 网络编程不难上手,关键在理解 TCP 和 UDP 的本质区别,并用对场景。TCP 适合需要可靠传输的通信(比如文件上传、登录验证),UDP 更轻量,适合实时性要求高、能容忍少量丢包的场景(比如视频流、游戏状态同步)。下面直接从实战出发,带你写出可运行的客户端和服务器代码。

一、TCP 通信:带连接的可靠传输

TCP 是面向连接的协议,通信前必须三次握手建立连接,传输中保证顺序和不丢失。写一个最简但完整的回声服务器(收到什么就发回什么)和客户端:

服务器端(server_tcp.py):

import socket
<p>server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('127.0.0.1', 8080))
server.listen(1)
print("TCP 服务器启动,等待连接...")</p><p>conn, addr = server.accept()
print(f"已连接客户端:{addr}")</p><p>while True:
data = conn.recv(1024)
if not data:
break
print(f"收到:{data.decode()}")
conn.send(data)  # 原样回传</p><p>conn.close()
server.close()

客户端(client_tcp.py):

立即学习Python免费学习笔记(深入)”;

import socket
<p>client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('127.0.0.1', 8080))</p><p>msg = "Hello, TCP Server!"
client.send(msg.encode())
response = client.recv(1024)
print(f"服务器回复:{response.decode()}")</p><p>client.close()

运行顺序:先启动 server_tcp.py,再运行 client_tcp.py。注意两点:

  • recv() 默认阻塞,没数据会一直等;send() 不保证一次发完,大消息需循环发送
  • 实际项目中建议加 try/except 处理连接中断、超时等异常
  • 多客户端支持?把 accept() 后的处理逻辑放进新线程或用 asyncio 异步化

二、UDP 通信:无连接的快速广播

UDP 不建连接、不重传、不排序,开销小,适合一对多、低延迟场景。下面实现一个单次请求-响应的“时间查询”服务:

AiBiao.cn
AiBiao.cn

一句话自动生成图表

下载

服务器端(server_udp.py):

import socket
import time
<p>server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server.bind(('127.0.0.1', 8081))
print("UDP 服务器启动,监听 8081...")</p><p>while True:
data, addr = server.recvfrom(1024)
if data == b"time":
now = time.strftime("%Y-%m-%d %H:%M:%S")
server.sendto(now.encode(), addr)

客户端(client_udp.py):

import socket
<p>client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)</p><p>client.sendto(b"time", ('127.0.0.1', 8081))
response, _ = client.recvfrom(1024)
print("当前时间:", response.decode())</p><p>client.close()

关键点:

  • UDP 用 recvfrom() 和 sendto(),自动携带地址信息,无需提前 connect
  • 没有“连接断开”概念,所以不用 close() 也能工作,但养成关闭习惯更稳妥
  • UDP 可能丢包、乱序——如果你发的是“心跳包”或“位置快照”,丢了下一帧补上就行,不必重发

三、常见问题与调试技巧

写完跑不通?先查这几个地方:

  • 端口被占用?用 netstat -an | grep 8080(Linux/macOS)或 netstat -ano | findstr :8080(Windows)查进程,或换其他端口(如 8082)
  • 防火墙拦截?临时关闭测试,或添加入站规则允许对应端口
  • localhost vs 127.0.0.1?多数情况等价,但某些系统配置下有差异,统一用 127.0.0.1 更稳
  • 中文乱码?确保 encode() 和 decode() 编码一致,默认用 'utf-8'

四、进阶方向建议

掌握基础后,可按需延伸:

  • 加 TLS 加密:用 ssl.wrap_socket() 包装 socket,实现 HTTPS 或安全聊天
  • 支持多用户:TCP 用 threading 或 asyncio;UDP 可结合 select/poll 实现单线程多路复用
  • 封装成类:把 socket、bind、send/recv 封装成 Server/Client 类,提升复用性和可读性
  • 对接真实协议:比如用 socket 模拟 HTTP GET 请求,或解析 DNS 查询报文(UDP + 二进制结构)

相关文章

编程速学教程(入门课程)
编程速学教程(入门课程)

编程怎么学习?编程怎么入门?编程在哪学?编程怎么学才快?不用担心,这里为大家提供了编程速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

743

2023.08.10

windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1385

2023.07.26

查看端口占用情况windows
查看端口占用情况windows

端口占用是指与端口关联的软件占用端口而使得其他应用程序无法使用这些端口,端口占用问题是计算机系统编程领域的一个常见问题,端口占用的根本原因可能是操作系统的一些错误,服务器也可能会出现端口占用问题。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1159

2023.07.27

windows照片无法显示
windows照片无法显示

当我们尝试打开一张图片时,可能会出现一个错误提示,提示说"Windows照片查看器无法显示此图片,因为计算机上的可用内存不足",本专题为大家提供windows照片无法显示相关的文章,帮助大家解决该问题。

830

2023.08.01

windows查看端口被占用的情况
windows查看端口被占用的情况

windows查看端口被占用的情况的方法:1、使用Windows自带的资源监视器;2、使用命令提示符查看端口信息;3、使用任务管理器查看占用端口的进程。本专题为大家提供windows查看端口被占用的情况的相关的文章、下载、课程内容,供大家免费下载体验。

460

2023.08.02

windows无法访问共享电脑
windows无法访问共享电脑

在现代社会中,共享电脑是办公室和家庭的重要组成部分。然而,有时我们可能会遇到Windows无法访问共享电脑的问题。这个问题可能会导致数据无法共享,影响工作和生活的正常进行。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2361

2023.08.08

windows自动更新
windows自动更新

Windows操作系统的自动更新功能可以确保系统及时获取最新的补丁和安全更新,以提高系统的稳定性和安全性。然而,有时候我们可能希望暂时或永久地关闭Windows的自动更新功能。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

874

2023.08.10

windows boot manager
windows boot manager

windows boot manager无法开机的解决方法:1、系统文件损坏,使用Windows安装光盘或USB启动盘进入恢复环境,选择修复计算机,然后选择自动修复;2、引导顺序错误,进入恢复环境,选择命令提示符,输入命令"bootrec /fixboot"和"bootrec /fixmbr",然后重新启动计算机;3、硬件问题,使用硬盘检测工具进行扫描和修复;4、重装操作系统。本专题还提供其他解决

1947

2023.08.28

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

4

2026.03.04

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 10.1万人学习

Git 教程
Git 教程

共21课时 | 4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号