Python基础教程(十九):网络编程

news2024/11/29 11:57:43

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快!
💝💝💝如有需要请大家订阅我的专栏【Python系列】哟!我会定期更新相关系列的文章
💝💝💝关注!关注!!请关注!!!请大家关注下博主,您的支持是我不断创作的最大动力!!!

文章目录

    • 引言
    • 一、网络编程基础知识
      • 1.1 网络协议
      • 1.2 Socket编程
    • 二、Python网络编程实践
      • 2.1 基于TCP的客户端与服务器示例
        • 服务器端代码
        • 客户端代码
      • 2.2 基于UDP的客户端与服务器示例
        • 服务器端代码
        • 客户端代码
      • 2.3 HTTP请求示例
    • 三、高级主题
      • 3.1 多线程/多进程网络编程
      • 3.2 异步网络编程
    • 四、总结
    • 结束语

引言

在数字化时代,网络编程是软件开发中的重要组成部分。Python作为一种广泛使用的编程语言,以其简洁的语法和强大的库支持,在网络编程领域占据了重要的地位。本文旨在深入探讨Python网络编程的基础知识与实践案例,帮助读者掌握如何使用Python进行基本的网络通信。

一、网络编程基础知识

1.1 网络协议

网络编程的核心在于理解网络协议,尤其是TCP/IP协议族。TCP/IP协议族由一系列协议组成,包括但不限于IP(Internet Protocol)、TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)。其中,TCP提供面向连接的、可靠的字节流服务;UDP则是无连接的,不保证数据的可靠传输,但效率较高。

1.2 Socket编程

Socket是网络编程中最基本的API,它定义了应用程序如何在本地系统和其他系统之间进行通信。在Python中,使用socket模块可以创建Socket,进行网络通信。Socket有不同类型,如SOCK_STREAM(基于TCP)和SOCK_DGRAM(基于UDP)。

二、Python网络编程实践

2.1 基于TCP的客户端与服务器示例

服务器端代码
import socket

def start_server(host='127.0.0.1', port=65432):
    # 创建Socket
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
        # 绑定地址和端口
        s.bind((host, port))
        # 开始监听
        s.listen()
        print("Server is listening...")
        
        # 接受客户端连接
        conn, addr = s.accept()
        with conn:
            print('Connected by', addr)
            while True:
                # 接收数据
                data = conn.recv(1024)
                if not data:
                    break
                # 发送响应
                conn.sendall(data)

if __name__ == "__main__":
    start_server()
客户端代码
import socket

def connect_to_server(host='127.0.0.1', port=65432):
    # 创建Socket
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
        # 连接服务器
        s.connect((host, port))
        # 发送数据
        s.sendall(b'Hello, world')
        # 接收数据
        data = s.recv(1024)
    
    print('Received', repr(data))

if __name__ == "__main__":
    connect_to_server()

2.2 基于UDP的客户端与服务器示例

服务器端代码
import socket

def start_server(host='127.0.0.1', port=65432):
    # 创建Socket
    with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:
        # 绑定地址和端口
        s.bind((host, port))
        print("Server is listening...")
        
        while True:
            # 接收数据和客户端地址
            data, addr = s.recvfrom(1024)
            print("Received from:", addr)
            # 发送响应
            s.sendto(data, addr)

if __name__ == "__main__":
    start_server()
客户端代码
import socket

def connect_to_server(host='127.0.0.1', port=65432):
    # 创建Socket
    with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:
        # 发送数据
        s.sendto(b'Hello, UDP server!', (host, port))
        # 接收数据
        data, addr = s.recvfrom(1024)
    
    print('Received', repr(data), 'from', addr)

if __name__ == "__main__":
    connect_to_server()

2.3 HTTP请求示例

Python的requests库简化了HTTP请求的操作,无需直接操作Socket。下面是一个获取网页内容的例子:

import requests

def fetch_webpage(url="http://example.com"):
    response = requests.get(url)
    return response.text

if __name__ == "__main__":
    print(fetch_webpage())

三、高级主题

3.1 多线程/多进程网络编程

在处理大量并发连接时,可以使用多线程或多进程来提高服务器的响应能力。Python的threading模块和multiprocessing模块为此提供了支持。

3.2 异步网络编程

对于I/O密集型任务,异步编程可以显著提高程序的执行效率。Python的asyncio模块支持异步编程,允许编写非阻塞的网络程序。

四、总结

Python网络编程涉及的知识点众多,从基础的Socket编程到高级的异步编程,每一种都有其适用场景。通过本文的学习,相信你已经对Python网络编程有了初步的理解和实践。


结束语

喜欢博主的同学,请给博主一丢丢打赏吧↓↓↓您的支持是我不断创作的最大动力哟!感谢您的支持哦😘😘😘
打赏下吧

💝💝💝如有需要请大家订阅我的专栏【Python系列】哟!我会定期更新相关系列的文章
💝💝💝关注!关注!!请关注!!!请大家关注下博主,您的支持是我不断创作的最大动力!!!

python相关文章索引文章链接
Python基础语法(一):标识符与保留字部分Python基础语法(一):标识符与保留字部分
Python基础语法(二):数据类型Python基础语法(二):数据类型
Python基础语法(三):运算符Python基础语法(三):运算符
Python基础语法(四):条件控制Python基础语法(四):条件控制
Python基础语法(五):循环语句Python基础语法(五):循环语句
Python基础语法(六):推导式编程Python基础语法(六):推导式编程
Python基础教程(七):函数编程-从基础到进阶Python基础教程(七):函数编程-从基础到进阶
Python基础教程(八):迭代器与生成器编程Python基础教程(八):迭代器与生成器编程
Python基础教程(九):Lambda 函数Python基础教程(九):Lambda 函数
Python基础教程(十):装饰器Python基础教程(十):装饰器
Python基础教程(十一):数据结构汇总梳理Python基础教程(十一):数据结构汇总梳理
Python基础教程(十二):模块Python基础教程(十二):模块
Python基础教程(十三):file文件及相关的函数Python基础教程(十三):file文件及相关的函数
Python基础教程(十四):OS 文件/目录方法Python基础教程(十四):OS 文件/目录方法
Python基础教程(十五):面向对象编程Python基础教程(十五):面向对象编程
Python基础教程(十六):正则表达式Python基础教程(十六):正则表达式
Python基础教程(十七):CGI编程Python基础教程(十七):CGI编程
Python基础教程(十八):MySQL - mysql-connector 驱动Python基础教程(十八):MySQL - mysql-connector 驱动

❤️❤️❤️觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

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

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

相关文章

【吊打面试官系列-Mysql面试题】实践中如何优化 MySQL?

大家好,我是锋哥。今天分享关于 【实践中如何优化 MySQL?】面试题,希望对大家有帮助; 实践中如何优化 MySQL? 最好是按照以下顺序优化: 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 1、SQL 语…

组件化框架 ARouter 完全解析(一)

一、路由认知 ARouter从命名即可知,这是一个路由框架。那么路由是个啥呢? 路由(routing)就是通过互联的网络把信息从源地址传输到目的地址的活动。-- 百科 可见 路由 是个动词,这是网络传输中的概念,完成路…

跨境电商测评、采购大额下单自养号需要解决哪些技术原理?

市场上有许多伪装工具,但大多数只是为了方便开发人员测试系统程序,它们并不能针对特定的电商平台进行伪装。每个电商平台都有其独特的风控机制,因此,我们需要从硬件环境的底层配合软件控制,以满足各平台的检测规则。 …

Spring boot 使用AbstractRoutingDataSource实现数据源动态切换

目录 一、AbstractRoutingDataSource 二、具体实现 1、pom.xml 2、新建UserMapper 3、在spring boot 启动类上添加扫描mapper注解 4、在配置文件 application.properties 中添加多个(我这里是两个)数据源的配置信息 5、集成动态数据源模块 5.1、新建注解 CurDataSource…

【复旦邱锡鹏教授《神经网络与深度学习公开课》笔记】梯度的反向传播算法

矩阵微积分(Matrix Calculus) 在开始之前,需要先了解矩阵微积分的一些计算规则。 首先,对于矩阵微积分的表示,通常由两种符号约定: 分母布局 标量关于向量的导数为列向量 向量关于标量的导数为行向量 N维…

C# Winform Datagridview查询项目实例

在项目中,我们经常要遇到查询和展示内容,常用的做法是通过文本框,时间控件,按键和datagridview查询和展示内容。下面是一个常见的综合实例,并支持Excel(csv)导入导出,表格列动态调整的功能。 实例代码链接&…

【python-AI篇】人工智能技能树思维导图

大致总结一下得出如下思维导图,如不完善日后迭代更新 1. python基础三方库 1.1 科学计算库 ---- numpy库 1.2 科学计算库 ---- Scipy库 1.3 数据分析处理库 ---- pandas库 1.4 可视化库 ---- matplotlib库 1.5 可视化库 ---- seaborn库 1.6 机器学习和数据挖掘库 …

springboot网上书店管理系统-计算机毕业设计源码03780

摘 要 网上书店管理系统采用B/S结构、java开发语言、以及Mysql数据库等技术。系统主要分为管理员和用户两部分,管理员管理主要功能包括:首页、站点管理(轮播图)用户管理(管理员、注册用户)内容管理&#x…

OpenCV 4.10 发布

OpenCV 4.10 JPEG 解码速度提升 77%,实验性支持 Wayland、Win ARM64 根据 “OpenCV 中国团队” 介绍,从 4.10 开始 OpenCV 对 JPEG 图像的读取和解码有了 77% 的速度提升,超过了 scikit-image、imageio、pillow。 4.10 版本的一些亮点&…

第N4周:中文文本分类-Pytorch实现

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制🚀 文章来源:K同学的学习圈子 目录 一、准备工作 1.任务说明 文本分类流程图: 2.加载数据 ​编辑 二、…

第2章 Rust初体验7/8:错误处理时不关心具体错误类型的下划线:提高代码可读性:猜骰子冷热游戏

讲动人的故事,写懂人的代码 2.6.6 用as进行类型转换:显式而简洁的语法 贾克强:“大家在查看Rust代码时,可能会注意到这一句。在这里,如果我们不使用as i32,编译器会报错,因为它在u32中找不到abs()方法。这是因为prev和sum_of_two_dice都是u32类型,u32类型并不支持abs(…

【LLM】吴恩达『微调大模型』课程完全笔记

Finetuning Large Language Models 版权说明: 『Finetuning Large Language Models』是DeepLearning.AI出品的免费课程,版权属于DeepLearning.AI(https://www.deeplearning.ai/)。 本文是对该课程内容的翻译整理,只作为教育用途,不…

4-字符串-11-反转字符串-LeetCode344

4-字符串-11-反转字符串-LeetCode344 LeetCode: 题目序号344 更多内容欢迎关注我(持续更新中,欢迎Star✨) Github:CodeZeng1998/Java-Developer-Work-Note 技术公众号:CodeZeng1998(纯纯技术文&#xff0…

【牛客面试必刷TOP101】Day32.BM68 矩阵的最小路径和和BM69 把数字翻译成字符串

文章目录 前言一、BM68 矩阵的最小路径和题目描述题目解析二、BM69 把数字翻译成字符串题目描述题目解析总结 前言 一、BM68 矩阵的最小路径和 题目描述 描述: 给定两个字符串str1和str2,输出两个字符串的最长公共子序列。如果最长公共子序列为空&#x…

Ubuntu系统环境配置

Ubuntu安装terminator以及美化 安装 sudo apt-get install terminator美化 修改或者创建.config/terminator/config文件,添加如下配置 [global_config]suppress_multiple_term_dialog Truetitle_font Sans 11title_use_system_font False [keybindings] [lay…

supOS助力中核陕西铀浓缩有限公司迈向智能化、数字化、绿色化

中核陕西铀浓缩有限公司是中国核工业集团有限公司所属大型生产骨干企业,建于1969年10月,是我国第一座采用离心法生产浓缩铀的工厂。 蓝卓基于supOS工业操作系统,以“三化一平台一基础”的顶层架构,面向陕铀公司工艺优化、设备管理…

【Photoshop】PS修改文字内容

Photoshop(PS)修改图片上文字内容,网上教材不少,本人整理实践过的方法,分享给各位。本人实践方法: 内容识别填充:适用于背景色复杂的图片内容修补工具:适用于背景色为纯色的图片 方式一:内容识…

el-table表头文字换行或者修改字体颜色样式

例如 <el-table:data"tableData":header-cell-style"headClass" style"width: 100%;" border ><el-table-columnprop"address"label"生产工序"align"center"></el-table-column> //重点看这里…

uniapp 开发版小程序之间跳转

uni.navigateToMiniProgram({appId: urL,path: patH,envVersion: release,//我使用develop会给我返回&#xff1a;开发版小程序已过期&#xff0c;请在开发者工具重新扫码确定success(res) {console.log(res);// 打开成功uni.showToast({title: 跳转成功})},fail(err) {console…

希亦、追觅、云鲸洗地机:究竟有何不同?选择哪款更合适

最近收到很多私信里&#xff0c;要求洗地机测评的呼声特别高&#xff0c;作为宠粉的测评博主&#xff0c;当然是马上安排起来&#xff0c;满足大家对想看洗地机的愿望。这次洗地机测评&#xff0c;我挑选了三款热门的品牌型号&#xff0c;并从多个维度对它们进行使用测评&#…