当前位置: 首页 > news >正文

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.xdnf.cn/news/651385.html

相关文章:

  • 【人工智能-agent】--使用python调用dify工作流
  • Win10/Win11终极C盘清理指南
  • 深入剖析Java中的伪共享:原理、检测与解决方案
  • RT-Thread源码阅读(3)——内核对象管理
  • ES6基础
  • 考研408《计算机组成原理》复习笔记,第二章(3)数值数据的运算(浮点数计算篇)
  • 新一代WebP2P视频物联技术:EasyRTC嵌入式音视频通信SDK助力音视频实时通信场景应用
  • 基于SpringBoot+RabbitMQ完成应用通信
  • 编程日志5.19
  • 一根网线可以有两个ip地址吗?怎么实现
  • 洛谷-P1957 口算练习题
  • 基于大模型的胃肠道功能紊乱手术全程预测与干预方案研究
  • Elasticsearch 分片驱逐(Shard Exclusion)方式简析:`_name`、`_ip`、`_host`
  • 图论 判断是否有环
  • (自用)Java学习-5.13(Redis,OSS)
  • 第三十七天打卡
  • 【EdgeYOLO】《EdgeYOLO: An Edge-Real-Time Object Detector》
  • 分布式爬虫架构设计
  • Python 实现简单OCR文本识别
  • HTML应用指南:利用GET请求获取全国捞王锅物料理门店位置信息
  • cannot access ‘/etc/mysql/debian.cnf‘: No such file or directory
  • 解决 iTerm2 中 nvm 不生效的问题(Mac 环境)
  • “安康杯”安全生产知识竞赛活动流程方案
  • 课上实验111111
  • 4、docker compose
  • 汽配快车道:助力汽车零部件行业的产业重构与数字化出海
  • 关于OT IIOT系统远程访问的零信任安全
  • 从“黑箱”到透明化:MES如何重构生产执行全流程?
  • NV211NV212美光科技颗粒NV219NV220
  • Python——day37早停策略和模型权重的保存