2.4 python网络编程

在当今数字化的时代,网络连接着世界的每一个角落。从简单的网页浏览到复杂的分布式系统,网络编程无处不在。Python 作为一种功能强大且易于学习的编程语言,在网络编程领域占据着重要的地位。它丰富的库和简洁的语法使得开发者能够高效地构建各种网络应用。

一、Python 网络编程基础概念​

(一)网络协议​

网络协议是网络通信的规则和标准。常见的网络协议如 TCP(传输控制协议)和 UDP(用户数据报协议)。TCP 提供可靠的、面向连接的通信,适合对数据准确性要求高的应用,如文件传输、网页浏览等。UDP 则是无连接的,速度快但不保证数据的可靠传输,常用于实时性要求高的场景,如视频流、音频流。Python 的 socket 库为开发者提供了使用这些协议进行编程的接口。​

(二)IP 地址与端口​

IP 地址用于唯一标识网络中的设备,就像现实生活中的家庭住址。端口则是应用程序在设备上的通信端点,不同的端口对应不同的服务。例如,HTTP 协议默认使用 80 端口,HTTPS 使用 443 端口。在 Python 网络编程中,需要正确配置 IP 地址和端口来实现与目标设备或服务的通信。

二、Python 网络编程的优势​

(一)简洁易读的语法​

Python 以其简洁、易读的语法著称。相比其他编程语言,Python 编写网络代码的行数更少,代码结构更清晰。这使得开发者能够更快地理解和编写网络应用,减少开发时间和出错的概率。例如,使用 Python 的 socket 库创建一个简单的 TCP 服务器,代码量远少于 C 或 Java 语言。​

(二)丰富的网络库​

Python 拥有众多强大的网络库。除了标准库中的 socket 库外,还有用于 HTTP 请求的 requests 库,它使得发送 HTTP 请求变得轻而易举;Twisted 库提供了异步网络编程的框架,适用于开发高性能的网络应用;Flask 和 Django 等 Web 框架也是基于 Python 网络编程构建的,用于快速开发 Web 应用。这些库极大地扩展了 Python 在网络编程方面的能力。

三、常见的 Python 网络编程应用场景​

(一)Web 开发​

Python 在 Web 开发领域应用广泛。通过 Flask、Django 等框架,开发者可以轻松构建 Web 服务器,处理 HTTP 请求和响应。这些框架提供了路由、模板引擎、数据库连接等功能,使得开发 Web 应用变得高效且便捷。许多知名的网站,如 Instagram、Dropbox 等,都使用 Python 进行后端开发。​

(二)网络爬虫​

网络爬虫是从网页中提取数据的程序。Python 丰富的库,如 BeautifulSoup 用于解析 HTML 和 XML 文档,Scrapy 用于构建大型爬虫项目,使得编写网络爬虫变得相对容易。网络爬虫可以用于数据收集、市场调研、搜索引擎优化等领域,但需要注意遵守法律法规,避免侵犯他人权益。​

(三)分布式系统​

在分布式系统中,不同的节点通过网络进行通信和协作。Python 的分布式计算框架,如 Celery,可用于实现分布式任务队列,将复杂的任务分配到多个节点上并行处理,提高系统的处理能力和效率。Python 的网络编程能力在构建分布式系统的通信模块中起着关键作用。

四、Python 网络编程示例

(一)简单 TCP 服务器

import socket
import threadingdef handle_client(client_socket, client_address):print(f"Connected to client: {client_address}")try:while True:data = client_socket.recv(1024)if not data:breakreceived_data = data.decode('utf - 8')print(f"Received data: {received_data}")# 这里可以增加更复杂的数据处理逻辑response = f"Server received: {received_data}"client_socket.sendall(response.encode('utf - 8'))except Exception as e:print(f"Error handling client {client_address}: {e}")finally:client_socket.close()# 创建一个TCP套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 设置套接字选项,以便在程序重启时可以重用地址
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server_address = ('localhost', 12345)
try:# 绑定IP地址和端口server_socket.bind(server_address)# 监听连接server_socket.listen(5)print(f"Server is listening on {server_address[0]}:{server_address[1]}")while True:client_socket, client_address = server_socket.accept()client_thread = threading.Thread(target=handle_client, args=(client_socket, client_address))client_thread.start()
except Exception as e:print(f"Server startup error: {e}")
finally:server_socket.close()

(二)简单 UDP 服务器

import socket# 创建UDP套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DUDP)
server_address = ('localhost', 12346)
try:# 绑定IP地址和端口server_socket.bind(server_address)print(f"UDP Server is listening on {server_address[0]}:{server_address[1]}")while True:data, client_address = server_socket.recvfrom(1024)received_data = data.decode('utf - 8')print(f"Received from {client_address}: {received_data}")response = f"UDP Server received: {received_data}"server_socket.sendto(response.encode('utf - 8'), client_address)
except Exception as e:print(f"UDP Server error: {e}")
finally:server_socket.close()

(三)简单 UDP 客户端

import socket# 创建UDP套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_address = ('localhost', 12346)
message = "Hello, UDP Server!"
try:# 发送数据到服务器client_socket.sendto(message.encode('utf - 8'), server_address)data, server = client_socket.recvfrom(1024)received_data = data.decode('utf - 8')print(f"Received from server: {received_data}")
finally:client_socket.close()

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

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

相关文章

Canoe Panel常用控件

文章目录 一、Panel 中控件分类1. 指示类控件2. 功能类控件3. 信号值交互类控件4. 其他类控件 二、控件使用方法1. Group Box 控件2. Input/Output Box控件3. Static Text控件4. Button控件5. Switch/Indicator 控件 提示:Button 和 Switch 的区别参考 一、Panel 中…

睡不着运动锻炼贴士

在快节奏的现代生活中,失眠似乎已成为许多人的“夜间伴侣”。夜晚辗转反侧,白天精神不振,这样的恶性循环让许多人苦不堪言。其实,除了调整作息和饮食习惯,适当的运动也是改善睡眠的一剂良药。今天,就让我们…

java数据结构(复杂度)

一.时间复杂度和空间复杂度 1.时间复杂度 衡量一个程序好坏的标准,除了能处理各种异常,还有就是时间效率,当然,对于一些配置好的电脑数据处理起来就是比配置低的高,但从后期发展来看,当数据量足够庞大时&…

NAT和NAPT的介绍

一、NAT的介绍以及作用 二、NAPT的介绍以及作用 三、NAT vs NAPT 一、NAT的介绍以及作用 1.1 NAT的介绍 NAT(Network Address Translation)是一种广泛应用于互联网的技术,主要用于解决IPv4地址耗尽问题,同时提供网络安全和网络…

VSCode通过SSH免密远程登录Windows服务器

系列 1.1 VSCode通过SSH远程登录Windows服务器 1.2 VSCode通过SSH免密远程登录Windows服务器 文章目录 系列1 准备工作2 本地电脑配置2.1 生成密钥2.2 VS Code配置密钥 3. 服务端配置3.1 配置SSH服务器sshd_config3.2 复制公钥3.3 配置权限(常见问题)3.…

大模型训练全流程深度解析

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。https://www.captainbed.cn/north 文章目录 1. 大模型训练概览1.1 训练流程总览1.2 关键技术指标 2. 数据准备2.1 数据收集与清洗2.2 数据…

export、export default 和 module.exports 深度解析

文章目录 1. 模块系统概述1.1 模块系统对比1.2 模块加载流程 2. ES Modules2.1 export 使用2.2 export default 使用2.3 混合使用 3. CommonJS3.1 module.exports 使用3.2 exports 使用 4. 对比分析4.1 语法对比4.2 使用场景 5. 互操作性5.1 ES Modules 中使用 CommonJS5.2 Com…

AI芯片设计

目的:未来的时代,一定会是AI的时代,那么,AI时代的三个重要组成部分,我要参与其中之一! 参考视频:AI芯片设计第一讲_哔哩哔哩_bilibili 端处理 云端

动手学深度学习:CNN和LeNet

前言 该篇文章记述从零如何实现CNN,以及LeNet对于之前数据集分类的提升效果。 从零实现卷积核 import torch def conv2d(X,k):h,wk.shapeYtorch.zeros((X.shape[0]-h1,X.shape[1]-w1))for i in range(Y.shape[0]):for j in range(Y.shape[1]):Y[i,j](X[i:ih,j:jw…

【开源代码解读】AI检索系统R1-Searcher通过强化学习RL激励大模型LLM的搜索能力

关于R1-Searcher的报告: 第一章:引言 - AI检索系统的技术演进与R1-Searcher的创新定位 1.1 信息检索技术的范式转移 在数字化时代爆发式增长的数据洪流中,信息检索系统正经历从传统关键词匹配到语义理解驱动的根本性变革。根据IDC的统计…

使用Node的http模块创建web服务,给客户端返回html页面时,css失效的根本原因(有助于理解http)

最近正在尝试使用node写后端,使用node创建http服务的时候,碰到了这样的一个问题: 这是我的源代码: import { createServer } from http import { join, dirname, extname } from path import { fileURLToPath } from url import…

JVM 2015/3/15

定义:Java Virtual Machine -java程序的运行环境(java二进制字节码的运行环境) 好处: 一次编写,到处运行 自动内存管理,垃圾回收 数组下标越界检测 多态 比较:jvm/jre/jdk 常见的JVM&…

IP风险度自检,互联网的安全“指南针”

IP地址就像我们的网络“身份证”,而IP风险度则是衡量这个“身份证”安全性的重要指标。它关乎着我们的隐私保护、账号安全以及网络体验,今天就让我们一起深入了解一下IP风险度。 什么是IP风险度 IP风险度是指一个IP地址可能暴露用户真实身份或被网络平台…

【鸿蒙】封装日志工具类 ohos.hilog打印日志

封装一个ohos.hilog打印日志 首先要了解hilog四大日志类型: info、debug、warm、error 方法中四个参数的作用 domain: number tag: string format: string ...args: any[ ] 实例: //普通的info日志,使用info方法来打印 //第一个参数 : 0x0…

走路碎步营养补充贴士

走路碎步,这种步伐不稳的现象,在日常生活中并不罕见,特别是对于一些老年人或身体较为虚弱的人来说,更是一种常见的行走状态。然而,这种现象可能不仅仅是肌肉或骨骼的问题,它还可能是身体在向我们发出营养缺…

Python软件和搭建运行环境

目录 一、Python安装全流程(Windows/Mac/Linux) 1. 下载官方安装包 2. 详细安装步骤(以Windows为例) 3. 环境变量配置(Mac/Linux) 二、虚拟环境管理(关键!) 为什么需…

【蓝桥杯】省赛:神奇闹钟

思路 python做这题很简单,灵活用datetime库即可 code import os import sys# 请在此输入您的代码 import datetimestart datetime.datetime(1970,1,1,0,0,0) for _ in range(int(input())):ls input().split()end datetime.datetime.strptime(ls[0]ls[1],&quo…

RabbitMQ (Java)学习笔记

目录 一、概述 ①核心组件 ②工作原理 ③优势 ④应用场景 二、入门 1、docker 安装 MQ 2、Spring AMQP 3、代码实现 pom 依赖 配置RabbitMQ服务端信息 发送消息 接收消息 三、基础 work Queue 案例 消费者消息推送限制(解决消息堆积方案之一&#…

HW基本的sql流量分析和wireshark 的基本使用

前言 HW初级的主要任务就是看监控(流量) 这个时候就需要我们 了解各种漏洞流量数据包的信息 还有就是我们守护的是内网环境 所以很多的攻击都是 sql注入 和 webshell上传 (我们不管对面是怎么拿到网站的最高权限的 我们是需要指出它是…

camellia redis proxy v1.3.3对redis主从进行读写分离(非写死,自动识别故障转移)

1 概述 camellia-redis-proxy是一款高性能的redis代理(https://github.com/netease-im/camellia),使用netty4开发,主要特性如下: 支持代理到redis-standalone、redis-sentinel、redis-cluster。支持其他proxy作为后端…