Python网络编程详解

adc46c7026314d9a8c5f97578048c105.png


概要

 

Python作为一种强大的编程语言,拥有丰富的网络编程库和框架,能够方便地进行各种网络编程任务。本文将介绍Python网络编程的基础知识,包括socket编程和HTTP协议,然后深入探讨一些流行的Python Web框架,包括Flask和Django。


一、Socket编程

Socket是一种在计算机网络中用于进程间通信的机制,通常用于建立客户端与服务器之间的连接。Python提供了socket库,使得开发者能够方便地使用各种协议(如TCP、UDP等)进行网络通信。

Socket的本质是一种编程接口,是一组用于进行网络通信的函数和系统调用。通过Socket,我们可以在网络上发送和接收数据,以实现网络通信。有了Socket,我们就可以像玩玩具积木一样,通过不同的组合方式,打造各种各样的网络应用程序,如聊天工具、文件传输工具、视频会议工具等等。

想象一下,如果没有Socket这个工具,我们该如何实现网络通信呢?难道要每个程序员都去研究底层的网络通信协议,像探险家一样在网络中寻找信息吗?Socket就像是一个智能导航,让我们在复杂的网络环境中快速找到目标,让我们更加轻松地进行网络编程。有点像你要和你的朋友通话,你需要先插上你的耳机和麦克风,然后再插到你的朋友的手机上,这样你们之间才能互相传递声音信息。

Socket不仅方便实用,还有一点非常有趣,就是它可以让你实现各种有趣的网络应用程序,比如利用Socket写一个简单的聊天机器人,或者用Socket实现远程控制等等。

下面是一个简单的socket客户端代码:

import socket
HOST = '127.0.0.1'  # 服务器的IP地址PORT = 8080  # 服务器的端口号
# 创建Socket对象client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 连接服务器client_socket.connect((HOST, PORT))
# 发送消息给服务器message = '你好,服务器!'client_socket.sendall(message.encode())
# 接收服务器的响应response = client_socket.recv(1024)# 将服务器响应转换成字符串并打印出来print('服务器返回的消息:', response.decode())
# 关闭连接client_socket.close()

下面是一个简单的socket服务端代码:​​​​​​​

import socket
HOST = '127.0.0.1'  # 监听本机IP地址PORT = 8080  # 监听端口号
# 创建Socket对象server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 绑定监听的IP地址和端口号server_socket.bind((HOST, PORT))# 监听客户端的连接server_socket.listen(1)print('等待客户端连接...')
# 接收客户端请求并返回响应while True:    # 等待客户端连接    conn, addr = server_socket.accept()    print('客户端已连接:', addr)    # 接收客户端发送的数据    data = conn.recv(1024)    if not data:        break    # 将客户端发送的数据转换成字符串并打印出来    print('客户端发送的消息:', data.decode())    # 将响应发送给客户端    response = '已经收到你的消息:{}'.format(data.decode())    conn.sendall(response.encode())# 关闭连接conn.close()

上面的2个代码里面,服务器端首先创建一个Socket对象,指定监听的IP地址和端口号,然后等待客户端的连接。当客户端连接到服务器时,服务器端接收客户端发送的消息,打印出来,并将响应发送给客户端。客户端也创建一个Socket对象,并连接到服务器指定的IP地址和端口号。然后向服务器发送一条消息,并接收服务器的响应,将其转换成字符串并打印出来。

这个代码只是一个简单的Socket通信的示例,实际应用中还需要考虑很多其他的因素,比如网络延迟、数据包丢失、安全性等等。

二、HTTP协议

HTTP协议是Web应用程序最常用的协议之一,它定义了Web客户端和Web服务器之间的通信规范。HTTP请求和响应是由请求行、头部和消息体三部分组成。

下面是一个使用Python进行HTTP请求的代码:​​​​​​​

import http.client
conn = http.client.HTTPSConnection("www.qq.com")conn.request("GET", "/")res = conn.getresponse()data = res.read()
print(res.status, res.reason)print(data.decode("utf-8"))

在这个示例中,我们首先通过http.client.HTTPSConnection创建了一个HTTPS连接,然后使用conn.request方法发送了一个GET请求,最后使用res.read方法获取服务器返回的数据。

三、Flask框架

Flask是一个轻量级的Web应用框架,基于Python语言和Werkzeug工具包。它提供了简单易用的API,可以方便地进行路由、请求和响应的处理。

下面是一个使用Flask编写Web应用的代码:​​​​​​​

from flask import Flask, request
app = Flask(__name__)
@app.route("/")def hello():    name = request.args.get("name", "World")    return f"Hello, {name}!"
if __name__ == "__main__":    app.run()

在这个demo中,先创建了一个Flask应用对象,然后使用@app.route装饰器将/路径的GET请求映射到hello函数上。在hello函数中,通过request.args.get获取URL参数中的name值,如果没有传就默认为World。最后,我们返回一个包含问候语的字符串。

运行这个应用程序,你将会看到一个简单的Web页面,它会输出Hello, World!或者Hello, {name}!,其中{name}是你在URL GET参数中提供的值。

四、Django框架

Django是一个功能强大的Web应用框架,它基于Python语言和模型-视图-控制器(MVC)架构模式。它提供了许多有用的组件,包括ORM(对象关系映射)、模板引擎、表单处理等。

下面是一个使用Django编写Web应用的demo代码:​​​​​​​

from django.http import HttpResponsefrom django.shortcuts import render
def hello(request):    name = request.GET.get("name", "World")    return HttpResponse(f"Hello, {name}!")
def index(request):    return render(request, "index.html")

是不是觉得超级精简?在这个demo中,我们首先定义了一个hello函数,它与Flask中的hello函数相似,都是用来输出问候语的。然后,我们定义了一个index函数,它将渲染一个名为index.html的模板文件,并返回结果。注意需要子先在urls.py里面配置路由规则。

在Django中,模板文件使用Django模板语言编写,它具有丰富的标签和过滤器,能够方便地进行模板渲染和数据展示。

无论你是初学者还是有经验的Python开发者,这些知识都对你有所帮助。

 

 

 

 

 

 

 

 

 

 

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android JNI系列详解之ndk编译工具环境变量配置

一、前提 之前是只介绍了CMake编译工具的使用,现在介绍另一种原生(NDK自带的脚本工具)自带的编译方式:ndk-build,想要使用ndk-build编译工程,我们需要配置全局的环境变量。 二、配置环境变量 找到ndk在电脑…

2023腾讯全球数字生态大会预约报名入口

报名入口 2023腾讯全球数字生态大会即将开启,点击打开预约报名入口。 主题与介绍 主题 2023腾讯全球数字生态大会将聚焦产业未来发展新趋势,针对云计算、大数据、人工智能、安全、SaaS等核心数字化工具做关键进展发布,并联合生态伙伴推出最…

合宙Air724UG LuatOS-Air LVGL API控件--日历 (Calendar)

日历 (Calendar) LVGL 提供了一个用来选择和显示当前日期的日历控件。 示例代码 – 高亮显示的日期 highlightDate lvgl.calendar_date_t() – 日历点击的回调函数 – 将点击日期设置高亮 function event_handler(obj, event) if event lvgl.EVENT_VALUE_CHANGED then da…

WIFI与BT的PCB布局布线注意事项

1、模块整体布局时,WIFI模组要尽量远离DDR、HDMI、USB、LCD电路以及喇叭等易干扰模块或连接座; 2、晶体电路布局需要优先考虑,布局时应与芯片在同一层并尽量靠近放置以避免打过孔,晶体走线尽可能的短,远离干扰源&…

C# 跨线程访问窗体控件

在不加任何修饰的情况下,C# 默认不允许跨线程访问控件,实际在项目开发过程中,经常使用跨线程操作控件属性,需要设置相关属性才能正确使用,两种方法设置如下: 方法1:告诉编译器取消跨线程访问检…

视频汇聚/视频云存储/视频监控管理平台EasyCVR视频平台添加萤火云设备的具体操作步骤

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

CData Drivers for SAS xpt Crack

CData Drivers for SAS xpt Crack 使用基于标准的驱动程序,加入数据库、报告工具和自定义程序中的实时SAS xpt(XPORT)数据文件。 与BI分析、报告、ETL工具和自定义解决方案集成。 适用于SAS xpt的CData驱动程序。神奇的功能: BI和分析 我们的驱动程序是将…

电子科大软件系统架构设计——系统分析与设计概述(含课堂作业、练习答案)

系统分析与设计概述 信息系统概述 what 信息系统是一种能够完成对业务数据进行采集、转换、加工、计算、分析、传输、维护等信息处理,并能就某个方面问题给用户提供信息服务的计算机应用系统。 组成 信息化基础设施(计算机、计算机网络、服务器、系统…

零信任安全模型详解:探讨零信任安全策略的原理、实施方法和最佳实践,确保在网络中实现最小特权原则

在当今日益复杂和危险的网络环境中,传统的网络安全模型已经不再能够满足对抗不断进化的威胁。零信任安全模型应运而生,以其强调“不信任,始终验证”的理念,成为了当今信息技术领域中的热门话题。本文将深入探讨零信任安全模型&…

JVM内存模型介绍

java内存中变量的存储位置 局部变量:方法中的局部变量存在于栈内存。每当程序调用一个方法时,系统都会为该方法建立一个方法栈,所在方法中声明的变量就放在方法栈中,方法结束系统会销毁该方法栈,在该方法中声明的变量随…

基础知识回顾:借助 SSL/TLS 和 NGINX 进行 Web 流量加密

原文作者: Robert Haynes 原文链接: 基础知识回顾:借助 SSL/TLS 和 NGINX 进行 Web 流量加密 NGINX 唯一中文官方社区 ,尽在 nginx.org.cn 网络攻击者肆无忌惮、作恶多端,几乎每天都有网络入侵、数据窃取或勒索软件攻击…

华为eNSP模拟器中,路由器如何添加serial接口

在ensp模拟器中新建拓扑后,添加2个路由器。 在路由器图标上单击鼠标右键,选择设置选项。 在【视图】选项卡的【eNSP支持的接口卡】窗口查找serial接口卡。 选择2SA接口卡,将其拖动到路由器空置的卡槽位。 如上图所示,已经完成路由…

【LeetCode题目详解】第八章 贪心算法 part05 435. 无重叠区间 763.划分字母区间 56. 合并区间 (day36补)

本文章代码以c为例! 一、力扣第435题:无重叠区间 题目: 给定一个区间的集合 intervals ,其中 intervals[i] [starti, endi] 。返回 需要移除区间的最小数量,使剩余区间互不重叠 。 示例 1: 输入: intervals [[1,…

Python爬虫乱码问题之encoding和apparent_encoding的区别

encoding是从http中的header中的charset字段中提取的编码方式,若header中没有charset字段则默认为ISO-8859-1编码模式,则无法解析中文,这是乱码的原因 apparent_encoding会从网页的内容中分析网页编码的方式,所以apparent_encodi…

学生信息管理系统MIS(前端)

改造HTML文件 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>学生信息管理系统MIS</title><!-- link在HTML文件中,引入外部的css文件 rel的值是固定写法,stylesheet样式表href用来指定样式表的位置--><lin…

关于C语言参数传递的

一、C语言参数传递是整体带入 #include <stdio.h> #define DF(a,b) (a2*b) int main() { int s5; int k DF((s1),(s-3)); printf("%d",k); }输出结果 原因&#xff1a; #define DF(a,b) (a2*b) int k DF((s1),(s-3)); //等效 int k DF((s1)2 * (s-3)); …

计算机网络-笔记-第三章-数据链路层

&#x1f338;章节汇总 一、第一章——计算机网络概述 二、第二章——物理层 三、第三章——数据链路层 四、第四章——网络层 五、第五章——运输层 六、第六章——应用层 目录 三、第三章——数据链路层 1、数据链路层概述&#xff08;帧&#xff09; &#xff08;1&…

【docker】容器的运行、停止、查看等基本操作

容器与镜像的区别 image镜像 Docker image是一个read-only文件&#xff0c;位于磁盘上这个文件包含文件系统&#xff0c;源码&#xff0c;库文件&#xff0c;依赖&#xff0c;工具等一些运行application所需要的文件可以理解成一个模板docker image具有分层的概念 container…

DBO优化SVM的电力负荷预测,附MATLAB代码

今天为大家带来一期基于DBO-SVM的电力负荷预测。 原理详解 文章对支持向量机(SVM)的两个参数进行优化&#xff0c;分别是&#xff1a;惩罚系数c和 gamma。 其中&#xff0c;惩罚系数c表示对误差的宽容度。c越高&#xff0c;说明越不能容忍出现误差,容易过拟合。c越小&#xff0…

芯探科技--泛自动驾驶激光雷达解决方案

泛自动驾驶应用领域: 无人配送车 无人叉车 服务机器人 无人清扫车 …… 泛自动驾驶激光雷达解决方案介绍 在中低速移动过程中,类似无人配送车、无人叉车、服务型机器人、无人清扫车等具有自动驾驶功能的车辆,其需要对周围的环境进行探测,进而实现…