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

Python高级编程与实践:Python网络编程基础与实践

Python网络编程实战:从Socket到Requests

学习目标

通过本课程,学员将深入了解Python中的网络编程基础,掌握使用socket库进行基本的网络通信,以及如何利用requests库发送HTTP请求。通过本课程的学习,学员将能够构建简单的网络应用程序,并理解网络编程的基本原理。

相关知识点

Python网络编程实战

学习内容

1 Python网络编程实战

1.1 使用socket库进行网络通信
1.1.1 理解Socket编程基础

在Python中,socket库提供了访问底层网络接口的方法,使得开发者能够创建网络应用程序。Socket编程是网络编程的基础,它允许程序之间通过网络进行通信。在本节中,我们将学习如何使用Python的socket库创建一个简单的客户端-服务器模型。

理论知识:

  • Socket类型:在Python中,主要使用两种类型的Socket,TCP(传输控制协议)和UDP(用户数据报协议)。TCP是一种面向连接的协议,提供可靠的数据传输服务;而UDP是一种无连接的协议,提供不可靠但快速的数据传输服务。
  • Socket地址:每个Socket都有一个地址,通常由IP地址和端口号组成。IP地址用于标识网络中的设备,端口号用于标识设备上的应用程序。
  • Socket方法:socket库提供了多种方法来创建和管理Socket,包括socket()、bind()、listen()、accept()、connect()、send()、recv()等。

实践代码: 下面是一个简单的TCP服务器和客户端的示例代码,展示了如何使用socket库进行基本的网络通信。

服务器端代码:

import socket# 创建一个TCP/IP socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 绑定socket到本地地址和端口
server_address = ('localhost', 10000)
server_socket.bind(server_address)# 监听传入连接
server_socket.listen(1)print('等待连接...')
connection, client_address = server_socket.accept()
print(f'连接来自: {client_address}')try:while True:data = connection.recv(1024)print(f'收到数据: {data.decode()}')if data:response = f'收到: {data.decode()}'connection.sendall(response.encode())else:print('没有数据,关闭连接')break
finally:# 清理连接connection.close()server_socket.close()

客户端代码:

import socket# 创建一个TCP/IP socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 连接到服务器
server_address = ('localhost', 10000)
client_socket.connect(server_address)try:message = '你好,服务器!'print(f'发送: {message}')client_socket.sendall(message.encode())# 接收响应response = client_socket.recv(1024)print(f'收到响应: {response.decode()}')
finally:# 清理连接client_socket.close()
1.1.2 实践:构建一个简单的聊天应用

在理解了基本的Socket编程之后,我们可以尝试构建一个简单的聊天应用。这个应用将包括一个服务器和多个客户端,客户端可以向服务器发送消息,服务器将消息广播给所有连接的客户端。

服务器端代码:

import socket
import threading# 创建一个TCP/IP socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 绑定socket到本地地址和端口
server_address = ('localhost', 10001)
server_socket.bind(server_address)# 监听传入连接
server_socket.listen(5)
print('等待连接...')# 存储所有连接的客户端
clients = []def broadcast(message, sender):for client in clients:if client != sender:client.sendall(message.encode())def handle_client(client_socket, client_address):while True:try:data = client_socket.recv(1024)if data:print(f'收到数据: {data.decode()}')broadcast(data.decode(), client_socket)else:print(f'客户端 {client_address} 断开连接')clients.remove(client_socket)client_socket.close()breakexcept:continuewhile True:client_socket, client_address = server_socket.accept()print(f'连接来自: {client_address}')clients.append(client_socket)client_thread = threading.Thread(target=handle_client, args=(client_socket, client_address))client_thread.start()

客户端代码:

import socket
import threading# 创建一个TCP/IP socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 连接到服务器
server_address = ('localhost', 10001)
client_socket.connect(server_address)def receive_messages():while True:try:message = client_socket.recv(1024).decode()print(message)except:print('连接断开')client_socket.close()breakdef send_messages():while True:message = input()client_socket.sendall(message.encode())receive_thread = threading.Thread(target=receive_messages)
send_thread = threading.Thread(target=send_messages)receive_thread.start()
send_thread.start()
1.2 使用requests库发送HTTP请求

理解HTTP请求。 HTTP(超文本传输协议)是互联网上应用最为广泛的一种网络协议。requests库是Python中一个非常流行的HTTP库,它使得发送HTTP请求变得非常简单。在本节中,我们将学习如何使用requests库发送GET和POST请求,并处理响应。

理论知识:

  • HTTP方法:HTTP定义了多种请求方法,最常用的是GET和POST。GET请求用于从服务器获取资源,POST请求用于向服务器发送数据。
  • 响应状态码:HTTP响应包含一个状态码,用于表示请求的结果。常见的状态码包括200(成功)、404(未找到)和500(服务器内部错误)。
  • 请求头和响应头:请求头和响应头包含了一些额外的信息,如内容类型、编码方式等。

实践代码: 下面是一个使用requests库发送GET和POST请求的示例代码。

发送GET请求:

import requests# 发送GET请求
response = requests.get('https://api.github.com')# 检查响应状态码
if response.status_code == 200:print('请求成功')print('响应内容:', response.text)
else:print(f'请求失败,状态码: {response.status_code}')

发送POST请求:

import requests# 发送POST请求
data = {'key': 'value'}
response = requests.post('https://httpbin.org/post', data=data)# 检查响应状态码
if response.status_code == 200:print('请求成功')print('响应内容:', response.json())
else:print(f'请求失败,状态码: {response.status_code}')
1.3 网络编程中的异常处理

理解异常处理的重要性。 在网络编程中,异常处理是非常重要的。网络通信可能会遇到各种问题,如网络中断、服务器不可达等。通过适当的异常处理,可以提高程序的健壮性和用户体验。

理论知识:

  • 常见的网络异常:常见的网络异常包括连接超时、连接中断、服务器返回错误状态码等。
  • 异常处理机制:Python提供了try-except语句来捕获和处理异常。通过捕获异常,可以避免程序因异常而崩溃,并提供友好的错误提示。

实践代码: 下面是一个使用requests库发送HTTP请求并处理异常的示例代码。

import requeststry:# 发送GET请求response = requests.get('https://api.github.com', timeout=5)# 检查响应状态码if response.status_code == 200:print('请求成功')print('响应内容:', response.text)else:print(f'请求失败,状态码: {response.status_code}')
except requests.exceptions.Timeout:print('请求超时')
except requests.exceptions.ConnectionError:print('连接错误')
except requests.exceptions.HTTPError as e:print(f'HTTP错误: {e}')
except requests.exceptions.RequestException as e:print(f'请求错误: {e}')
http://www.dtcms.com/a/316792.html

相关文章:

  • Linux的NFS与Autofs配置指南
  • mac安装pycharm
  • 2048小游戏
  • VUE2 学习笔记 合集
  • 如何在nuxt项目中使用axios进行网络请求?
  • 【STM32】HAL库中的实现(三):PWM(脉冲宽度调制)
  • C语言线程同步详解(互斥锁、信号量、条件变量和读写锁)
  • GPU 安装
  • 前端包管理器深度对比
  • 双模对讲机是什么意思?与模拟/数字对讲机有什么区别?
  • 使用 ECharts 实现小区住户数量统计柱状图
  • Leetcode-2080区间内查询数字的频率
  • Spring AI 系列之三十六 - Spring AI Alibaba-nl2sql
  • 02--类和对象
  • 大厂面试题
  • React在使用create-react-app创建项目慢的解决办法
  • TanStack React Query 完全指南:从0到精通
  • Flux.1系列模型解析--Flux.1 Tools
  • 【模电笔记】—— 直流稳压电源——整流、滤波电路
  • 无线网络扫描工具 ‌WifiInfoView‌
  • 高通平台Wi-Fi Display学习-- 调试 Wi-Fi Display 问题
  • 人工智能领域、图欧科技、IMYAI智能助手2024年全年历史更新大事件汇总
  • 人工智能领域、图欧科技、IMYAI智能助手2025年6月更新月报
  • RHCA05--进程管理与文件系统管理
  • 基于SpringBoot的青少年网络安全教育系统
  • C语言:20250805学习(文件预处理)
  • 系统集成项目管理工程师【第十一章 规划过程组】项目管理计划、范围管理与收集需求篇
  • VUE丢失long类型精度,使用 json-bigint 库解析大整数
  • 基于腾讯iOA的企业安全防护体系融合升级指南:从边界防御到无边界纵深防护
  • 前端工程化:Vue3(二)