python网络编程内容_Python网络编程

本文要写的内容也称为Python套接字编程,并简单介绍socketserver类。参考教程主要是《Python核心编程》。

首先,客户端/服务器模型,客户端向服务器发送请求,在请求合理的情况下,服务器返回客户端需要的资源,这是此架构下的通信方式。

套接字:套接字是计算机网络的数据结构,体现了通信端点的概念。在开始任何类型的通信之前,网络应用必须创建套接字。可以将套接字比作电话插口,没有它将无法进行通信。AF_INET 网络套接字 是目前使用最广泛的套接字。

套接字地址:一个网络地址由主机-端口 对来组成;可以将套接字比作电话插口,那么主机名和 端口号就像是区号与电话号码的组合。

PS:有效端口号范围为0~65535,小于1024的端口号预留给了系统。

套接字分为面向连接的套接字和无连接的套接字

面向连接的通信提供序列化的,可靠的和不重复的数据交付,而没有边界记录,这基本上意味着每条消息可以拆分成很多片段,并且每一条消息片段都确保能够达到目的地,然后将它们按顺序组合在一起,最后加将完整消息传递给正在等待的应用程序。

实现这种连接类型的主要协议是传输控制协议 TCP。创建TCP套接字,必须使用SOCK_STREAM作为套接字类型。

实例:

创建TCP服务器伪代码如下:

sock = socket() #创建套接字

sock.bind() #将套接字与地址绑定

sock.listen() #监听连接

loop: #服务器无限循环

csock = sock.accept() #接受客户端连接

loop: #通信循环

cs.recv()/cs.send() #接收发送数据

cs.close() #关闭客户端套接字

ss.close() #关闭服务器套接字

服务器示例代码如下:

客户端代码示例如下:

无连接套接字是数据报类型的套接字,这意味着,在通信开始之前不需要建立连接。所以,在数据传输过程中并无法保证它的顺序性,可靠性或重复性,而且还可能丢失信息。但它的优势也是明显的,比如开销小,“成本低廉”。实现这种无连接类型的主要协议是用户数据报协议UDP。必须使用SOCK_DGRAM作为套接字类型

创建UDP服务器的伪代码如下:

sock.socket() #创建通信套接字

sock.bind() #将套接字与地址绑定

loop: #服务器无限循环

csock = sock.recvfrom()/sock.sendto() #接收发送数据

sock.close() #关闭服务器套接字

示例代码如下:

socketserver模块简单介绍

这个模块的不同之处在于,我们使用类来编写应用程序。因为以面向对象的方式处理事物有助于组织数据,以及逻辑性地将功能放在正确的地方。应用程序是事件驱动的,这意味着只有在系统中的事件发生时,它们才会工作。

socketserver模块有4个具体的类

class socketserver.TCPServer(server_address, RequestHandlerClass, bind_and_activate=True):使用TCP协议

class socketserver.UDPServer(server_address, RequestHandlerClass, bind_and_activate=True):使用UDP协议

class socketserver.UnixStreamServer(server_address, RequestHandlerClass, bind_and_activate=True):只使用在UNIX平台上

class socketserver.UnixDatagramServer(server_address, RequestHandlerClass, bind_and_activate=True):只使用在UNIX平台上

这4个类的继承关系如下:

这四个类是同步处理请求的,每一个请求必须在前一个请求完成后再开始。所以如果每个请求都花费大量的时间的话,因为需要进行大量计算,那么它们是不合适的。解决方案就是创建一个分开的进程或者线程去处理每个请求,ForkingMixIn和ThreadingMixIn混入类可以用作支持异步行为。

创建一个服务器需要以下几步,首先,必须创建一个请求处理request handler类通过继承BaseRequestHandler类并且重写handler()方法。该方法将会处理进来的请求,第二步,必须继承server类中的一个,并且将它和request handler类一起传递到服务器地址。然后调用服务器的handle_request()或者serve_forever()方法去处理一个或多个请求。最后调用server_close()关掉套接字

socketserver.BaseServer类是此模块中服务器对象的超类,本身并不直接生成实例,而是通过派生关系,让子类生产实例,它的子类,比如TCPServer,UDPServer。

请求处理对象

socketserver.BaseQequestHandler是超类,每个子类都必须定义一个新的handle()方法,它的两个子类,StreamQequestHandler和DatagramQequestHandler.

示例代码也就是python docs上的代码:

需要注意的是,此片文章中,tcp的代码调试通过了,udp和socketserver的代码调试未通过,后续再努力

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

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

相关文章

程序员面试金典 - 面试题 16.17. 连续数列(DP/分治)

1. 题目 给定一个整数数组(有正数有负数),找出总和最大的连续数列,并返回总和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大&#xff0c…

视觉能力提升112%!李飞飞团队让AI进入社会,学会了“骗”标注…

作者 | 李梅编辑 | 陈彩娴来源 | AI科技评论人类从与他人的互动中学习,而目前的人工智能却常常只能在与社会隔离的环境中学习。所以当我们把一个智能体放到真实世界中时,它会不可避免地在遇到大量新的数据,无法应对不断变化的新需求。如何将智…

.Net 1.1下WEB引用Win控件的两个Bug

1.WEB系统引用windows控件的方式来实现页面打印的功能,一直使用比较正常,有一天更新后部分机器不能正常加载控件。后来分析的N久,发现是打印控件上我加了一个Label,使用了Arial Black字体,如果客户的机器上没有这种字体…

程序员面试金典 - 面试题 16.11. 跳水板(数学)

1. 题目 你正在使用一堆木板建造跳水板。 有两种类型的木板,其中长度较短的木板长度为shorter,长度较长的木板长度为longer。 你必须正好使用 k 块木板。编写一个方法,生成跳水板所有可能的长度。 返回的长度需要从小到大排列。 示例&…

信息抽取终于实现了大一统~

2022年了,有人说信息抽取领域早已是诸神黄昏。然而即使这样,依然“内卷”不止。似乎这个卷成麻花的领域已经看不到希望?但是不久前,这个沉寂之地忽然翻起了浪花,一篇发表在ACL2022上的工作,昭示着这个领域终…

python的输出函数_Python

Python print() 函数 描述 print() 方法用于打印输出,最常见的一个函数。 在 Python3.3 版增加了 flush 关键字参数。 print 在 Python3.x 是一个函数,但在 Python2.x 版本不是一个函数,只是一个关键字。 语法 以下是 print() 方法的语法: pr…

ubuntu6.06容易死机的一种解决方法

修改 /etc/X11/xorg.conf 在 Section "Module" 中把下面这句话注视掉。 # Load "dri" 然后,在下面这个Section中(你的可能有些出入,但应该有个相似的Section),把 Driver "ati" 改成 Dri…

程序员面试金典 - 面试题 17.12. BiNode(BST中序遍历)

1. 题目 二叉树数据结构TreeNode可用来表示单向链表(其中left置空,right为下一个链表节点)。 实现一个方法,把二叉搜索树转换为单向链表,要求值的顺序保持不变,转换操作应是原址的,也就是在原始…

从大一统视角理解扩散模型(Diffusion Models)

文 | 中森知乎资料来源这篇文章是近期笔者阅读扩散模型的一些技术博客和概览的一篇梳理。主要参考的内容来自Calvin luo的论文,针对的对象主要是对扩散模型已经有一些基础了解的读者。Calvin luo 的这篇论文为理解扩散模型提供了一个统一的视角,尤其是其…

python开三次方_用python计算三次方根

我试图在python中计算以下函数:f(x) (1 cos(x))^(1/3) def eval( i ): return math.pow( (1 math.cos( i )), 1/3) 为什么它总是返回给我1? 我试图计算积分的Right和Left近似值,后者应用Simpsons Rule,但是Python似乎不喜欢这个…

程序员面试金典 - 面试题 16.05. 阶乘尾数(5的因子)

1. 题目 设计一个算法,算出 n 阶乘有多少个尾随零。 示例 1: 输入: 3 输出: 0 解释: 3! 6, 尾数中没有零。示例 2: 输入: 5 输出: 1 解释: 5! 120, 尾数中有 1 个零. 说明: 你算法的时间复杂度应为 O(log n) 。来源:力扣(LeetCode&#x…

XML动态排序(1)

<?xml version"1.0" encoding"gb2312" ?><?xml-stylesheet type"text/xsl" href"paixu.xsl" ?><BlueIdea><team><blue_ID>1</blue_ID><blue_name>Sailflying</blue_name><blu…

python绘画_python学画画(上)

下载W3Cschool手机App&#xff0c;0基础随时随地学编程 导语 本来想用神经网络让计算机学会画铅笔画和素描的&#xff0c;后来发现其实不用神经网络效果也还可以&#xff0c;那么系列上就从简单的入手&#xff01; 先放图哈&#xff01;沙画&#xff1a;铅笔画&#xff1a;文件…

抖音、Tiktok危机!谷歌AI短视频生成模型,效果惊艳了

文 | 梦晨 Pine(发自凹非寺)源 | 量子位内容生成AI进入视频时代&#xff01;Meta发布「用嘴做视频」仅一周&#xff0c;谷歌CEO劈柴哥接连派出两名选手上场竞争。第一位Imagen Video与Meta的Make-A-Video相比突出一个高清&#xff0c;能生成1280*768分辨率、每秒24帧的视频片段…

程序员面试金典 - 面试题 16.07. 最大数值(位运算求max)

1. 题目 编写一个方法&#xff0c;找出两个数字a和b中最大的那一个。不得使用if-else或其他比较运算符。 示例&#xff1a; 输入&#xff1a; a 1, b 2 输出&#xff1a; 22. 解题 有符号整型数的二进制最高位存储的是符号位将符号位获取&#xff0c;1为负数&#xff0c;0…

python生成json_Python 生成json文件

原博文 2018-04-12 17:00 − 1.数据准备 数据下载 2.python代码 import datetime import os import mssqlhelper ms mssqlhelper.MSSQL(host"192.168.0.108", user"sa", pwd...218659 相关推荐 2019-05-09 21:36 − JSON(JavaScript Object Notation, JS …

一个数独问题的算法(已更新,提供一个简单算法,欢迎拍砖)

前段时间出差在外闲得无事看到一个数独问题。有三题&#xff0c;脑子不好使&#xff0c;只做出前两题。想想不如用程序来实现。我先把题放出来大家有兴趣研究一下。8 5 7 1 1 9 2 6 2 5 6 9 2 4 5 8 8 1 2 …

大规模CTR框架的变革之夜

文 | 卖萌酱大家好&#xff0c;我是卖萌酱。这几年&#xff0c;有太多的领域吃到了深度学习和大模型的红利&#xff0c;而被大家称之为“现金牛”业务的搜广推&#xff0c;相比CV、NLP等领域却表现的有点“慢半拍”。深度学习已经爆发有10年了。“点击率&#xff08;CTR&#x…

02. Creating a Web Forms User Interface

In this lesson, you will explore the various ASP.NET 2.0 server controls available in Visual Web Developer Express Edition. In addition, you will begin to get familiar with the windows in Visual Web Developer.发现好多东西都是我以前不知道的&#xff0c;收获挺…

程序员面试金典 - 面试题 05.03. 翻转数位(位运算)

1. 题目 给定一个32位整数 num&#xff0c;你可以将一个数位从0变为1。请编写一个程序&#xff0c;找出你能够获得的最长的一串1的长度。 示例 1&#xff1a; 输入: num 1775(11011101111) 输出: 8示例 2&#xff1a; 输入: num 7(0111) 输出: 4来源&#xff1a;力扣&#…