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开发者,这些知识都对你有所帮助。

 

 

 

 

 

 

 

 

 

 

 

 

 

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

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

相关文章

安卓绘制原理概览

绘制原理 Android 程序员都知道 Android 的绘制流程分为 Measure、Layout、Draw 三步骤,其中 Measure 负责测量 View 的大小Layout 负责确定 View 的位置Draw 负责将 View 画在屏幕上 由 ViewRootImpl 实现的 performTraversal 方法是 Measure、layout、draw 的真正…

2023高教社杯数学建模C题思路代码 - 蔬菜类商品的自动定价与补货决策

# 1 赛题 在生鲜商超中,一般蔬菜类商品的保鲜期都比较短,且品相随销售时间的增加而变差, 大部分品种如当日未售出,隔日就无法再售。因此, 商超通常会根据各商品的历史销售和需 求情况每天进行补货。 由于商超销售的蔬菜…

jemalloc 5.3.0源码总结

注意:jemalloc 的最新版本里没有所谓的 huge class,bin 中slab外面也不再套一个run的概念了,看其它人分享的文章时需要注意。 简述 用户侧通过 tcache 来访问,tcache 是一个线程的申请又释放的对象的缓存,它绑定了一…

Jenkins 持续集成:Linux 系统 两台机器互相免密登录

背景知识 我们把public key放在远程系统合适的位置,然后从本地开始进行ssh连接。 此时,远程的sshd会产生一个随机数并用我们产生的public key进行加密后发给本地,本地会用private key进行解密并把这个随机数发回给远程系统。 最后&#xf…

RHCA之路---EX280(6)

RHCA之路—EX280(6) 1. 题目 Create an application greeter in the project samples which uses the Docker image registry.lab.example.com/openshift/hello-openshift so that it is reachable at the following address only: https://greeter.apps.lab.example.com (Not…

分布式 - 服务器Nginx:基础系列之Nginx静态资源配置优化sendfile | tcp_nopush | tcp_nodelay

文章目录 1. sendfile 指令2. tcp_nopush 指令3. tcp_nodelay 指令 1. sendfile 指令 请求静态资源的过程:客户端通过网络接口向服务端发送请求,操作系统将这些客户端的请求传递给服务器端应用程序,服务器端应用程序会处理这些请求&#xff…

PaddleOCR训练部署文档

Cuda安装 wget https://developer.download.nvidia.com/compute/cuda/11.6.0/local_installers/cuda_11.6.0_510.39.01_linux.run sh cuda_11.6.0_510.39.01_linux.run#可能会报错,查看/var/log/nvidia-installer.log ,kill -9 [ID]可以解决vim ~/.bash…

Linux:tomcat (源码包安装)(官网下载-安装-启动-配置-等等等-----从入门到入土)

介绍 Apache Tomcat软件是一个开源实现 Jakarta Servlet、Jakarta Server Pages、Jakarta Expression Language、Jakarta WebSocket、Jakarta Annotations 和 Jakarta Authentication 规范。 这些规范是Jakarta EE平台的一部分。 Apache Tomcat软件是在开放和参与式中开发的。 …

基于SSM的学校运动会信息管理系统

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

网络协议从入门到底层原理学习(一)—— 简介及基本概念

文章目录 网络协议从入门到底层原理学习(一)—— 简介及基本概念一、简介1、网络协议的定义2、网络协议组成要素3、广泛的网络协议类型网络通信协议网络安全协议网络管理协议 4、网络协议模型对比图 二、基本概念1、网络互连模型2、计算机之间的通信基础…

洞察商机,驱动创新:智能数据分析引领企业发展

“五度易链”产业大数据解决方案由产业经济、智慧招商、企业服务、数据服务四大应用解决方案组成,囊括了产业经济监测、产业诊断分析、企业监测预警、企业综合评估、大数据精准招商、招商智能管理、企业管理、企业培育、企业市场服务、企业金融服务、产业数据开放服…

智慧工地可视化解决方案-智慧工地源码

智慧工地是指运用信息化手段,围绕施工过程管理,建立互联协同、智能生产、科学管理的施工项目信息化生态圈,并将此数据在虚拟现实环境下与物联网采集到的工程信息进行数据挖掘分析,提供过程趋势预测及专家预案,实现工程…

每日一题 2651. 计算列车到站时间

难度:简单 不多说 class Solution:def findDelayedArrivalTime(self, arrivalTime: int, delayedTime: int) -> int:return (arrivalTime delayedTime) % 24

为什么在线客服系统的消息撤回功能是有必要的?

如今在日常工作和沟通中,很多企业都在使用在线客服系统跟客户进行线上交流和协作。然而有时候客服可能会不小心发送错误的消息或包含敏感信息的消息,人们在现实的沟通交流中是不会真实存在“说出去的话还能收回来”的情况,但这是在网络上&…

2023-09-05 LeetCode每日一题(从两个数字数组里生成最小数字)

2023-09-05每日一题 一、题目编号 2605. 从两个数字数组里生成最小数字二、题目链接 点击跳转到题目位置 三、题目描述 给你两个只包含 1 到 9 之间数字的数组 nums1 和 nums2 ,每个数组中的元素 互不相同 ,请你返回 最小 的数字,两个数…

大模型综述论文笔记6-15

这里写自定义目录标题 KeywordsBackgroud for LLMsTechnical Evolution of GPT-series ModelsResearch of OpenAI on LLMs can be roughly divided into the following stagesEarly ExplorationsCapacity LeapCapacity EnhancementThe Milestones of Language Models Resources…

如何解决前端传递数据给后端时精度丢失问题

解决精度丢失 有时候我们在进行修改操作时,发现修改既不报错也不生效。我们进行排查后发现服务器端将数据返回给前端时没有出错,但是前端js将数据进行处理时却出错了,因为id是Long类型的,而js在处理后端返回给前端的Long类型数据…

git 给分支添加描述

需求:分支多了不知道当前分支的用处可以使用git br用来描述 效果: 全局安装命令 npm i -g git-br 项目内使用 git br 给f-230825-4-zhou分支备注 git config branch.f-230825-4-zhou.description 用来开发第四迭代需求 再次git br查看效果

【PHP代码审计】反序列化漏洞实战

文章目录 概述资源下载地址Typecho代码审计-漏洞原理call_user_func()_applyFilter()、get()与__get__toString()__construct()install.php POC利用漏洞利用复现利用链执行phpinfo()GET利用POST利用 getshell生成payload漏洞利用蚁剑连接 总结 概述 序列化,“将对象…

13 mysql date/time/datetime/year 的数据存储

前言 这里主要是 由于之前的一个 datetime 存储的时间 导致的问题的衍生出来的探究 探究的主要内容为 int 类类型的存储, 浮点类类型的存储, char 类类型的存储, blob 类类型的存储, enum/json/set/bit 类类型的存储 本文主要 的相关内容是 datetime/date/time/year 类类型…