Socketserver的运用(一)

2023-11-25 11:20
文章标签 运用 socketserver

本文主要是介绍Socketserver的运用(一),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在TCP通信中,是Client/Server的工作模式,而在这篇文章中,将主要利用python的Socketserver模块去开发一个简单的服务器。

首先,我们要选择好满足自己需求的服务器类型并将需要用到的模块进行import:

from socketserver import ThreadingTCPServer, StreamRequestHandler
from http import client
class Tserver(ThreadingTCPServer):         def __init__(self,server_address, selfRequestHandlerClass):ThreadingTCPServer.__init__(self,server_address, selfRequestHandlerClass)

在Socketserver模块中,共包含了六个类,有四个是用于同步模式,它们分别是:TCPServer、UDPServer、UnixStreamServer和

UnixDatagramServer,其中UnixStreamServer和UnixDatagramServer是旨在用于UNIX平台,而另外的ForkingMixIn和ThreadingMixIn则是用于异步模式,并且ForkingMixIn是为每一个客户端请求派生一个新的的进程专门处理,而ThreadingMixIn为每一个客户端请求派生一个新的线程去专门处理。之后我们利用Python的多重继承的特点,可以得出下表:

 

TCPServer

UDPServer

ForkingMixIn

ForkingTCPServer

ForkingUDPServer

ThreadingMixIn

ThreadingTCPServer

ThreadingUDPServer

所以我们此次开发的服务器便是——面向TCP连接的线程式异步服务器。

在定义好服务器类型之后,我们需要去定义请求处理器,但在此篇文章中,我们只对ScokerServer提供的BaseRequestHandle中的Setup()进行重载:显示出成功Telnet到所创建服务器的IP地址。

class selfRequestHandlerClass(StreamRequestHandler): def setup(self):clientlist = []flag = Truewhile flag:clientadd = self.client_addressif clientadd in clientlist :passelse:clientlist.append(clientadd)print(str(clientadd)+"已连接")

其实若是我们对BaseRequestHandle进行查看,便可看见:

def setup(self):passdef handle(self):passdef finish(self):pass

这意味初始函数setup()、回调函数handle()与终止化finish()都是虚函数,所以我们可以同时对这三个进行重载。

在重载setup()之后,我们便需要实例化服务器进行测试即可:

if __name__ == '__main__':address = ('',23)server = Tserver(address,selfRequestHandlerClass)server.serve_forever()pass

而在实例化服务器时,传入服务器需要绑定的地址是必要的,另一方面还应该传入已经自定义的Setup(),服务器实例将对每一个客户端连接调用它的Setup()方法,例如:server =ThreadingTCPServer((host, port), MyRequestHandler),而在这里,我们首先定义了一个address,之后server = Tserver(address,selfRequestHandlerClass),并且我们选择的是23号端口,即Telnet端口,同时使用server.serve_forever()多次处理客户端请求。

最后当我们测试代码时,效果如下:

 

 

附:

#coding:utf-8from socketserver import ThreadingTCPServer, StreamRequestHandler
from http import client
class Tserver(ThreadingTCPServer):         def __init__(self,server_address, selfRequestHandlerClass):ThreadingTCPServer.__init__(self,server_address, selfRequestHandlerClass)
class selfRequestHandlerClass(StreamRequestHandler): def setup(self):clientlist = []flag = Truewhile flag:clientadd = self.client_addressif clientadd in clientlist :passelse:clientlist.append(clientadd)print(str(clientadd)+"已连接")if __name__ == '__main__':address = ('',23)server = Tserver(address,selfRequestHandlerClass)server.serve_forever()pass

 

这篇关于Socketserver的运用(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/423703

相关文章

Python itertools中accumulate函数用法及使用运用详细讲解

《Pythonitertools中accumulate函数用法及使用运用详细讲解》:本文主要介绍Python的itertools库中的accumulate函数,该函数可以计算累积和或通过指定函数... 目录1.1前言:1.2定义:1.3衍生用法:1.3Leetcode的实际运用:总结 1.1前言:本文将详

poj 2431 poj 3253 优先队列的运用

poj 2431: 题意: 一条路起点为0, 终点为l。 卡车初始时在0点,并且有p升油,假设油箱无限大。 给n个加油站,每个加油站距离终点 l 距离为 x[i],可以加的油量为fuel[i]。 问最少加几次油可以到达终点,若不能到达,输出-1。 解析: 《挑战程序设计竞赛》: “在卡车开往终点的途中,只有在加油站才可以加油。但是,如果认为“在到达加油站i时,就获得了一

ElasticSearch 6.1.1运用代码添加索引及其添加,修改,删除文档

1、新建一个MAVEN项目:ElasticSearchTest 2、修改pom.xml文件内容: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.or

巧妙的运用Floyd算法

题目大概意思:输入n,m,n代表n个点,接着输入n个点之间的距离(n*n的矩阵),接下来m次询问,输入a,b,c如果a,b之间的最短路径中存在c点则输出Yes,否则输出No 比赛的时候没有做出来,赛后帆哥一点播就知道了。。。。我写的时候直接用floy算法求距离并记录路径。。然后TLE到死。。。我就奇怪了数据n,m都小于100,怎么会TLE啊。。。坑爹啊。。。我一直怀疑是不是用别的算法。。。。。帆

【kubernetes】配置管理中心Configmap运用

一,介绍 Configmap(简写 cm)是k8s中的资源对象,用于保存非机密性的配置的,数据可以用key/value键值对的形式保存,也可通过文件的形式保存。 【局限性】:在ConfigMap不是用来保存大量数据的,其数据量不可超过1 MiB。 kubectl get cm 二,功能 Configmap资源对象,可以有一个或者多个Configmap,通过 volume 形式映射到容器

运用WPS快速整理中英混排的网页文字的方法

朋友从网上下载了一篇技术文档,发现文档中每一行的行末都有一个段落符号,而真正要分段的段首则有4个半角空格,还有许多空段。   想重新编排一下,由于文档比较长,手工操作肯定不行,我向他推荐用WPS文字的“智能格式整理”功能。在该文档处于打开状态时,用鼠标点开“工具”菜单下的“文字工具→智能格式整理”,几秒钟后,所有的段首空格全部消失,段与段之间的空段也全部消除,但每一行行末的段落标记却依然

智能匹配新高度:相亲交友系统如何运用AI技术提升用户体验

在数字化时代,相亲交友系统正逐渐融入人工智能(AI)技术,以提升用户体验和匹配效率。AI的引入不仅改变了传统的交友方式,还为用户带来了更加个性化和精准的交友体验。以下是一篇关于如何运用AI技术提升相亲交友系统用户体验的文章。 智能匹配新高度:相亲交友系统如何运用AI技术提升用户体验 随着人工智能技术的飞速发展,相亲交友系统正迎来一场革命。AI的引入不仅提高了匹配的精准度,还极大地丰富了

编程技巧--位运算的巧妙运用(1)

作者:yunyu5120                这是我的这一系列文章的第一篇,主要讲述我学习过程中积累的一些编程技巧,由于我也是一个初学者,高手莫笑。这一篇主要讲解位运算的基础知识鱼与其简单应用,我主要以C/C++语言讲述,其他语言可以类推。如果你已经对位运算基础和应用十分熟悉,那么本文并不适合你。              我相信还是有一部分人对位运算还不是很了解,我希望你在

【Java】实体类Javabean的运用案例

文章目录 前言一、定义一个操作类专门处理数据二、代码总结 前言 实体类Javabean的运用案例,现在需要把数据与业务串联起来。 一、定义一个操作类专门处理数据 这里定义了一个叫DogOperator的类,专门用来处理Dog类里面的数据。 解析: 要把Dog类里面的数据拿到DogOperator类当做运用,那么首先要有个关联关系,那么用什么去关联呢?我们要获取一

OC中数组、字典、集合常用方法的运用

/* ====================== 一 NSArray========================          1.创建对象          1.1初始化方法(2) //一般程序有问题先检查初始化          1.2类方法          1.3字面量方法          2.数组查找          2.1通过下标访问对象[ .[i]]