Python 网络编程入门

目录

一、前言

二、网络通信基础12:TCP 与 UDP 协议解析

2.1 TCP 协议:可靠的面向连接通信

2.2 UDP 协7议:无连接的快速通信

2.3 Sock12et:网络通信的基石

三、TCP 编程实15战:从单工通信到双向聊天

3.1 TCP 客户端与服务器基础示例

3.2 双向聊天1819应用:实时交互的 TCP 通信

四、UDP 编程实战:无连接的快速数据传输

4.1 UDP 客户端与服务器基础示例

五、协议对比与应24用场景选择

六、总结与拓展


一、前言

随着互联网的普及,网络通信已成为计算机应用的核心。Python 凭借简洁易用的特性,成为网络编程的热门选择。本文将深入解析 TCP 与 UDP 协议的原理,通过 Socket 编程实现网络通信,并带你完成一个简易聊天应用的开发,帮助你快速掌握 Python 网络编程的核心技能。

二、网络通信基础12:TCP 与 UDP 协议解析

2.1 TCP 协议:可靠的面向连接通信

TCP(传输控制协议)通过三次握手建立连接四次挥手断开连接,确保数据可靠、有序传输。其核心特性包括:

  • 面向连接:通信前需先建立连接(如打电话需先拨号)。
  • 可靠性:通过序3列号、确认应答、重传机制确保数据不丢失(类似快递追踪系统)。
  • 流量控制:利用4滑动窗口技术避免接收方处理过载(如水管调节水流速度)。
  • 有序性:按序号5重组数据包,保证数据顺序正确。

典型应用场景:文6件传输(FTP)、电子邮件(SMTP)、网页浏览(HTTP)等对可靠性要求高的场景。

2.2 UDP 协7议:无连接的快速通信

UDP(用户数据报协议)无需建立连接,直接发送数据,具有以下特点:

  • 无连接:省去握手过程,通信效率高(类似发短信,无需等待对方接听)。
  • 不可靠传输:不8保证数据到达或顺序,可能丢包或乱序。
  • 速度快:无额外9开销,适合实时性场景(如在线游戏、视频会议)。
  • 支持广播 / 多播10:可同时向多个接收方发送数据。

典型应用场景:实11时音视频传输(如 WebRTC)、传感器数据采集、域名解析(DNS)等。

2.3 Sock12et:网络通信的基石

Socket 是网络编程的抽象层,Python 通过socket模块实现 Socket 接口。关键概念包括:

地址族AF_INET(IPv4)、AF_INET6(IPv6)。

协议类型S{insert\_element\_11\_}OCK_STREAM(TCP)、SOCK_DGRAM(UDP)。

通过 Socket,我们可14以轻松实现客户端与服务器的通信,无论是建立连接(TCP)还是直接发送数据(UDP)。

三、TCP 编程实15战:从单工通信到双向聊天

3.1 TCP 客户端与服务器基础示例

客户端代码(单向通信)

import socketdef tcp_client():# 创建TCP Socket(IPv4 + TCP协议)client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 连接服务器(本地回环地址,端口12345)client_socket.connect(("127.0.0.1", 12345))# 发送数据(需编码为字节流)client_socket.send("Hello, Server".encode("utf-8"))# 接收响应(最多1024字节)response = client_socket.recv(1024)print("Received from server:", response.decode("utf-8"))# 关闭连接client_socket.close()if __name__ == "__main__":tcp_client()

服务器代码(单向响应)

import socketdef tcp_server():# 创建TCP Socket并绑定地址server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)server_socket.bind(("127.0.0.1", 12345))# 开始监听(最大连接数5)server_socket.listen(5)print("Server is listening...")while True:# 接受客户端连接client_socket, client_addr = server_socket.accept()print(f"Connection from {client_addr}")# 接收数据message = client_socket.recv(1024)# 发送响应(需编码为字节流)client_socket.send(b"Hello, Client")# 关闭客户端连接client_socket.close()if __name__ == "__main__":tcp_server()

代码关键点

connect():客户端主动连接服务器。

bind():服务16器绑定 IP 和端口,固定通信入口。

listen()与17accept():服务器监听并接受连接请求。

数据需通过encod{insert\_element\_16\_}e()decode()完成字节流与字符串的转换。

3.2 双向聊天1819应用:实时交互的 TCP 通信

客户端(支持持续输入)

import socketdef tcp_chat_client():client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)client_socket.connect(("127.0.0.1", 12345))while True:# 获取用户输入message = input("You: ")if message.lower() == "exit":break  # 输入exit退出# 发送消息client_socket.send(message.encode("utf-8"))# 接收服务器响应response = client_socket.recv(1024)print(f"Server: {response.decode('utf-8')}")client_socket.close()if __name__ == "__main__":tcp_chat_client()

服务器(支持双向对话)

import socketdef tcp_chat_server():server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)server_socket.bind(("127.0.0.1", 12345))server_socket.listen(5)print("Server is waiting for connection...")# 接受客户端连接client_socket, client_addr = server_socket.accept()print(f"Connection established with {client_addr}")while True:# 接收客户端消息message = client_socket.recv(1024)if not message:break  # 无数据则退出print(f"Client: {message.decode('utf-8')}")# 服务器输入响应response = input("You: ")client_socket.send(response.encode("utf-8"))client_socket.close()server_socket.close()if __name__ == "__main__":tcp_chat_server()

运行效果

# 客户端
You: 你好,服务器!
Server: 你好,客户端!
You: exit# 服务器
Connection established with ('127.0.0.1', 50001)
Client: 你好,服务器!
You: 你好,客户端!

四、UDP 编程实战:无连接的快速数据传输

4.1 UDP 客户端与服务器基础示例

客户端代码(无连接发送)

import socketdef udp_client():# 创建UDP Socketclient_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 直接发送数据(需指定目标地址)client_socket.sendto("Hello, UDP Server".encode("utf-8"), ("127.0.0.1", 12345))# 接收响应(返回数据和服务器地址)response, server_addr = client_socket.recvfrom(1024)print(f"Received from {server_addr}: {response.decode('utf-8')}")client_socket.close()if __name__ == "__main__":udp_client()

服务器代码(无连接接收)

import socketdef udp_server():server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)server_socket.bind(("127.0.0.1", 12345))print("Server is listening...")while True:# 接收数据(返回数据和客户端地址)message, client_addr = server_socket.recvfrom(1024)print(f"Received from {client_addr}: {message.decode('utf-8')}")# 向客户端发送响应server_socket.sendto(b"Hello, UDP Client", client_addr)if __name__ == "__main__":udp_server()

代码关键点

sendto():UDP 无需连接,直接指定目标地址发送。

recvfrom(){insert\_element\_18\_}:接收数据时同时获取发送方地址。

connect(){insert\_element\_19\_}accept()步骤,通信流程更简单。

五、协议对比与应24用场景选择

特性TCPUDP
连接方式面向连接(需握手)无连接(直接发送)
可靠性可靠(重传机制)不可靠(可能丢包)
传输速度较慢(额外开销)较快(无连接开销)
适用场景文件传输、邮件、HTTP实时游戏、视频流、DNS 查询
Python 协议类型SOCK_STREAMSOCK_DGRAM

选择建议

需要数据完整性:优先选 TCP(如用户登录、订单系统)。

追求实时性:优先选 UDP(如直播弹幕、传感器数据上报)。

六、总结与拓展

本文通过理论解析和代码示例,带你掌握了 Python 网络编程的核心要点:

  1. TCP/UDP 协议:理解可靠连接与无连接通信的本质区别。
  2. Socket 编程25:学会使用socket模块实现客户端与服务器通信。
  3. 实战案例:完成了 TCP 单向通信、双向聊天和 UDP 简单交互的程序开发

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/web/81382.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Django压缩包形式下载文件

通过web将minio上的文件以压缩包-文件夹-文件的形式下载到本地 import os from bx_mes import settings from io import BytesIO import zipfile from django.http import StreamingHttpResponse class FileRemote(GenericAPIView):def post(self,request):# 压缩包名folder_n…

Enhancing Relation Extractionvia Supervised Rationale Verifcation and Feedback

Enhancing Relation Extraction via Supervised Rationale Verification and Feedback| Proceedings of the AAAI Conference on Artificial Intelligencehttps://ojs.aaai.org/index.php/AAAI/article/view/34631 1. 概述 关系抽取(RE)任务旨在抽取文本中实体之间的语义关

【RAG】ragflow源码亮点:文档embedding向量化加权融合

引言: 最近在看ragflow源码,其中有一个较为巧妙地设计:分别将 文字 、 标题 行向量化 之后,直接根据权重,进行加法运算,得到向量融合,增强了文本向量化的表示能力,这里开始讨论一下…

限流系列:sentinel

目录 滑动窗口算法 Sentinel 数据模型 示例 大致流程 ​​​​​​​entry ​​​​​​​entryWithPriority ​​​​​​​FlowSlot.entry ​​​​​​​checkFlow ​​​​​​​canPass ​​​​​​​avgUsedTokens ​​​​​​​passQps ​​​​​​​pa…

Java 访问者模式深度重构:从静态类型到动态行为的响应式设计实践

一、访问者模式的本质与核心价值 在软件开发的漫长演进中,设计模式始终是架构师手中的利刃。当我们面对复杂对象结构上的多种操作需求时,访问者模式(Visitor Pattern)犹如一把精密的手术刀,能够优雅地分离数据结构与作…

UE 5 C++设置物体位置和旋转,初始化虚幻引擎样条线、加载引用虚幻编辑器中的蓝图、设置虚幻编辑器中Actor大小

一、设置物体位置和旋转 UE.cpp文件中代码: Mesh->SetWorldLocationAndRotation(FVector(50.0f, 50.0f, 50.0f),FRotator(0,-90,0)); vs代码编辑器中旋转信息顺序(yzx): Pitch、 Yaw、 Roll UE编辑器中旋转信息顺序&#xf…

【文本分类】KG-HTC 知识图谱提升分类准确率

最近看到一篇论文“KG-HTC: Integrating Knowledge Graphs into LLMs for Effective Zero-shot Hierarchical Text Classification”,介绍了文本分类的技巧,这篇文航主要利用了知识图谱大模型的思路,实验效果不错,里面的一些论述也…

三大微调技术对比:Prompt/Prefix/P-Tuning

Prompt Tuning、Prefix Tuning和P - Tuning的区别 概念方面: Prompt Tuning:在输入序列前添加可训练的额外Token以适配下游任务,预训练语言模型参数不变。比如在文本分类中,在句子前加特定Token如“(OPINION)”,让模型理解是对观点进行分类的任务。Prefix Tuning:在每层T…

14.「实用」扣子(coze)教程 | Excel文档自动批量AI文档生成实战,中级开篇

随着AI编程工具及其能力的不断发展,编程将变得越来越简单。 在这个大趋势下,大师兄判断未来的编程将真正成为像office工具一样的办公必备技能。每个人通过 (专业知识/资源编程)将自己变成一个复合型的人才,大大提高生…

量子-经典协同计算新路径:NISQ 时代混合算法对后量子密码学的适应性探索

内容来源:量子前哨(ID:Qforepost) 文丨浪味仙 排版丨浪味仙 行业动向:3700字丨10分钟阅读 5 月 20 日,由北京量子院、清华大学、数学工程与先进计算国家重点实验室、南洋理工大学、量子信息前沿科学中心…

CentOS中安装Docker Compose

在CentOS中安装Docker Compose的步骤如下: 步骤 1:确保Docker已安装 Docker Compose依赖Docker环境,请先安装Docker: # 添加Docker官方仓库 sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://downlo…

电商小程序店铺详情页:头部无限分类与筛选功能实现

电商小程序店铺详情页:头部无限分类与筛选功能实现 一、场景需求与技术选型二、头部无限分类导航三、筛选功能实现:Picker多列选择组件一、场景需求与技术选型 在电商小程序生态中,店铺详情页作为用户浏览商品的核心流量入口,其交互效率与功能完整性直接影响商品转化率。传…

Graph Neural Network(GNN)

我们首先要了解什么是图,图是由节点和边组成的,边的不一样也导致节点的不同(参考化学有机分子中的碳原子) gnn可以处理classification的问题,也就是分类的问题 也可以处理generation的问题 借一部日剧来说明,这个日剧是讲主角寻找杀害他父亲的凶手的,剧中的人物有姓名和特征 …

FallbackHome的启动流程(android11)

首次开机开机动画播完进入Launcher桌面时黑屏进入Launcher,有黑屏不太美观,在重启以后会在进入桌面后会显示android正在启动等一会进入Launcher,这就是系统FallBackHome机制 接下来我们跟着代码看下首次启动系统如何进入FallbackHome的 在SystemServer的startOthe…

【EdgeYOLO】《EdgeYOLO: An Edge-Real-Time Object Detector》

Liu S, Zha J, Sun J, et al. EdgeYOLO: An edge-real-time object detector[C]//2023 42nd Chinese Control Conference (CCC). IEEE, 2023: 7507-7512. CCC-2023 源码:https://github.com/LSH9832/edgeyolo 论文:https://arxiv.org/pdf/2302.07483 …

宫格导航--纯血鸿蒙组件库AUI

摘要: 宫格导航(A_GirdNav):可设置导航数据,建议导航项超过16个,可设置“更多”图标指向的页面路由。最多显示两行,手机每行最多显示4个图标,折叠屏每行最多6个图标,平板每行最多8个图标。多余图…

调试的按钮

在Debug的时候,会有一些按钮,我们需要知道它们各自的作用。 注:调试器本身并没有一个直接的、可以撤销已执行代码效果的“返回上一步(Undo Last Step)”或“逆向执行(Reverse Debugging)”按钮…

人工智能如何协助老师做课题

第一步:在腾讯元宝对话框中输入如何协助老师做课题,通过提问,我们了解了老师做课题的步骤和建议。 第二步:开题报告提问,腾讯元宝对话框中,输入“大单元视域下小学数学教学实践研究课题开题报告。”......…

OpenGL Chan视频学习-5 Vertex Attributes and Layouts in OpenGL

bilibili视频链接: 【最好的OpenGL教程之一】https://www.bilibili.com/video/BV1MJ411u7Bc?p5&vd_source44b77bde056381262ee55e448b9b1973 一、知识点整理 1.1.OpenGL管线工作流程 为显卡提供绘制的所有数据,并将数据存储在GPU内存使用着色器&…

Linux_编辑器Vim基本使用

✨✨ 欢迎大家来到小伞的大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:LInux_st 小伞的主页:xiaosan_blog 制作不易!点个赞吧!!谢谢喵!&a…