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运用requests模拟浏览器发送请求过程

《python运用requests模拟浏览器发送请求过程》模拟浏览器请求可选用requests处理静态内容,selenium应对动态页面,playwright支持高级自动化,设置代理和超时参数,根据需... 目录使用requests库模拟浏览器请求使用selenium自动化浏览器操作使用playwright

Zabbix在MySQL性能监控方面的运用及最佳实践记录

《Zabbix在MySQL性能监控方面的运用及最佳实践记录》Zabbix通过自定义脚本和内置模板监控MySQL核心指标(连接、查询、资源、复制),支持自动发现多实例及告警通知,结合可视化仪表盘,可有效... 目录一、核心监控指标及配置1. 关键监控指标示例2. 配置方法二、自动发现与多实例管理1. 实践步骤

Swagger在java中的运用及常见问题解决

《Swagger在java中的运用及常见问题解决》Swagger插件是一款深受Java开发者喜爱的工具,它在前后端分离的开发模式下发挥着重要作用,:本文主要介绍Swagger在java中的运用及常... 目录前言1. Swagger 的主要功能1.1 交互式 API 文档1.2 客户端 SDK 生成1.3

CSS引入方式和选择符的讲解和运用小结

《CSS引入方式和选择符的讲解和运用小结》CSS即层叠样式表,是一种用于描述网页文档(如HTML或XML)外观和格式的样式表语言,它主要用于将网页内容的呈现(外观)和结构(内容)分离,从而实现... 目录一、前言二、css 是什么三、CSS 引入方式1、行内样式2、内部样式表3、链入外部样式表四、CSS 选

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文字的“智能格式整理”功能。在该文档处于打开状态时,用鼠标点开“工具”菜单下的“文字工具→智能格式整理”,几秒钟后,所有的段首空格全部消失,段与段之间的空段也全部消除,但每一行行末的段落标记却依然