python D29 socketserver以及FTB

一、socketserver

基于tcp协议下的socket只能和一个客户端通信,如果用socketserver可以实现和多个客户端通信。

他是在socket的基础上进行封装,也就是说底层还是调用的socket,在py2.7里面叫做SocketServer也就是大写了两个S,在py3里面就小写了。后面我们要写的FTP作业,需要用它来实现并发,也就是同时可以和多个客户端进行通信,多个人可以同时进行上传下载等。

socketserver

socketserver源码分析:

在整个socketserver这个模块中,其实就干了两件事情:1、一个是循环建立链接的部分,每个客户链接都可以连接成功  2、一个通讯循环的部分,就是每个客户端链接成功之后,要循环的和客户端进行通信。
看代码中的:server=socketserver.ThreadingTCPServer(('127.0.0.1',8090),MyServer)
还记得面向对象的继承吗?来,大家自己尝试着看看源码:
查找属性的顺序:ThreadingTCPServer->ThreadingMixIn->TCPServer->BaseServer实例化得到server,先找ThreadMinxIn中的__init__方法,发现没有init方法,然后找类ThreadingTCPServer的__init__,在TCPServer中找到,在里面创建了socket对象,进而执行server_bind(相当于bind),server_active(点进去看执行了listen) 找server下的serve_forever,在BaseServer中找到,进而执行self._handle_request_noblock(),该方法同样是在BaseServer中 执行self._handle_request_noblock()进而执行request, client_address = self.get_request()(就是TCPServer中的self.socket.accept()),然后执行self.process_request(request, client_address) 在ThreadingMixIn中找到process_request,开启多线程应对并发,进而执行process_request_thread,执行self.finish_request(request, client_address) 上述四部分完成了链接循环,本部分开始进入处理通讯部分,在BaseServer中找到finish_request,触发我们自己定义的类的实例化,去找__init__方法,而我们自己定义的类没有该方法,则去它的父类也就是BaseRequestHandler中找.... 源码分析总结:基于tcp的socketserver我们自己定义的类中的self.server即套接字对象self.request即一个链接self.client_address即客户端地址 基于udp的socketserver我们自己定义的类中的self.request是一个元组(第一个元素是客户端发来的数据,第二部分是服务端的udp套接字对象),如(b'adsf', <socket.socket fd=200, family=AddressFamily.AF_INET, type=SocketKind.SOCK_DGRAM, proto=0, laddr=('127.0.0.1', 8080)>)self.client_address即客户端地址

一套完整的socketserver代码示例:
server端
mport socketserver
class Myserver(socketserver.BaseRequestHandler):def handle(self):self.data = self.request.recv(1024).strip()print("{} wrote:".format(self.client_address[0]))print(self.data)self.request.sendall(self.data.upper())if __name__ == "__main__":HOST, PORT = "127.0.0.1", 9999# 设置allow_reuse_address允许服务器重用地址socketserver.TCPServer.allow_reuse_address = True# 创建一个server, 将服务地址绑定到127.0.0.1:9999#server = socketserver.TCPServer((HOST, PORT),Myserver)server = socketserver.ThreadingTCPServer((HOST, PORT),Myserver)# 让server永远运行下去,除非强制停止程序server.serve_forever()
socketserver_server端

client端

import socketHOST, PORT = "127.0.0.1", 9999
data = "hello"# 创建一个socket链接,SOCK_STREAM代表使用TCP协议
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:sock.connect((HOST, PORT))          # 链接到客户端sock.sendall(bytes(data + "\n", "utf-8")) # 向服务端发送数据received = str(sock.recv(1024), "utf-8")# 从服务端接收数据print("Sent:     {}".format(data))
print("Received: {}".format(received))
socketserver_client端

转载于:https://www.cnblogs.com/z520h123/p/10022165.html

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

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

相关文章

计算机节电模式不能打开,电脑进入节电模式打不开怎么办

大家好&#xff0c;我是时间财富网智能客服时间君&#xff0c;上述问题将由我为大家进行解答。电脑进入节电模式打不开的原因及解决方法如下&#xff1a;1、显示器和显卡接触不良解决办法&#xff1a;检查显示器和显卡的连接是否正确&#xff0c;接触是否良好&#xff1b;2、显…

sphinx mysql存储引擎_基于Sphinx+MySQL的千万级数据全文检索(搜索引擎)架构设计...

Sphinx&#xff0c;单一索引最大可包含1亿条记录&#xff0c;在1千万条记录情况下的查询速度为0.x秒(毫秒级)。Sphinx创建索引的速度为&#xff1a;创建100万条记录的索引只需3&#xff5e;4分钟&#xff0c;创建1000万条记录的索引可以在50分钟内完成&#xff0c;而只包含最新…

《第一桶金怎么赚——淘宝开店创业致富一册通》一一1.1 创业者需具备的素质...

本节书摘来自异步社区出版社《第一桶金怎么赚——淘宝开店创业致富一册通》一书中的第1章&#xff0c;第1.1节&#xff0c;作者&#xff1a;葛存山&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看。 1.1 创业者需具备的素质 第一桶金怎么赚——淘宝开店创业致…

4-1 线程安全性-原子性-atomic-1

转载于:https://www.cnblogs.com/ZHONGZHENHUA/p/10026627.html

构建了我的第一个React Native应用程序之后,我现在确信这是未来。

by Taylor Milliman泰勒米利曼(Taylor Milliman) 构建了我的第一个React Native应用程序之后&#xff0c;我现在确信这是未来。 (After building my first React Native app, I’m now convinced it’s the future.) After a few weeks of playing around with React Native, …

delphi7 提示注册过期问题

很同情你得经过~ 因为我以前也是经常遇见这个问题~就和你说得一样~ 后来~ 我发现 下载使用的Delphi 7只能使用一个注册码&#xff0c;那就是:6AMD-PKG68E-DB8PP7-9SFE 3QH-9QW所以,你先把C:\Documents and Settings\Administrator\.borland文件夹下的两个文件删除然后用 Progra…

计算机开机引导的结果是,电脑开机显示引导媒体是怎么回事

电脑开机显示引导媒体是怎么回事分类&#xff1a;数据恢复常见问题|最后更新&#xff1a;2020年4月9日开机显示重新启动并选择适当的引导设备或插入1.如果主机上接有可移动存储介质(如光盘、移动硬盘、U盘等),将其拔掉,然后重启。2.如果仍然这样,进入主板设置中,依次检测以下几…

《操作系统真象还原》——0.23 操作系统是如何识别文件系统的

本节书摘来自异步社区《操作系统真象还原》一书中的第0章&#xff0c;第0.23节&#xff0c;作者&#xff1a;郑钢著&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看 0.23 操作系统是如何识别文件系统的 我们知道&#xff0c;一个硬盘上可以有很多分区&#xf…

mysql怎样修改my ini_mysql修改my.ini报错怎么办

mysql修改my.ini报错的解决办法&#xff1a;首先将mysql默认编码改成utf8mb4&#xff0c;并修改【my.ini】配置&#xff1b;然后修改变量&#xff0c;并检查是否设置成功即可。更多相关免费学习推荐&#xff1a;mysql教程(视频)mysql修改my.ini报错的解决办法&#xff1a;将mys…

golang---map类型

map 类似其它语言中的哈希表或字典&#xff0c;以key-value形式存储数据key必须是支持或!比较运算的类型&#xff0c;不可以是函数、map或sliceMap查找比线性搜索快很多&#xff0c;但比使用索引访问数据的类型慢100倍 Map使用make()创建&#xff0c;支持:这种简写方式 make([k…

易语言程序应用程序错误退出_为什么我退出Google并构建了一个向孩子们教授个人理财的应用程序

易语言程序应用程序错误退出Many of my friends thought I was crazy to leave a great position at Google to help parents and kids learn about money. Maybe they’re right.我的许多朋友都认为我为在谷歌上任职以帮助父母和孩子了解金钱而感到疯狂。 也许他们是对的。 B…

蓝叠 正在检查服务器最新,Windows update一直停留在正在检查更新

Windows update一直停留在正在检查更新&#xff0c;为什么啊&#xff1f;一、查看相关服务是否开始&#xff1a;请您根据以下步骤&#xff0c;确认windows update & BITS服务设置1. 按下WinR键输入“services.msc”(输入时不要打引号)&#xff0c;并按下回车。如果此时弹出…

spring-DataSource

spring支持的dataSource有好多&#xff0c; 如&#xff1a;自带的org.springframework.jdbc.datasource.DriverManagerDataSource ibatis、c3p0、JDBC、hibernate等等&#xff1b; 首先看第一种&#xff0c;使用自带的datasource&#xff1a; 1、项目结构 提示&#xff1a;spri…

《Nmap渗透测试指南》—第7章7.8节后台打印机服务漏洞

本节书摘来自异步社区《Nmap渗透测试指南》一书中的第7章7.8节后台打印机服务漏洞&#xff0c;作者 商广明,更多章节内容可以访问云栖社区“异步社区”公众号查看。 7.8 后台打印机服务漏洞表7.8所示为本章节所需Nmap命令表&#xff0c;表中加粗命令为本小节所需命令——后台打…

VSCODE 配置远程调试环境

以下内容为本人的著作&#xff0c;如需要转载&#xff0c;请声明原文链接 微信公众号「englyf」https://mp.weixin.qq.com/s/f1KZOlL92ojes-r2l9rlCw 我的需求是&#xff0c;在Windows桌面环境下&#xff0c;通过 VSCODE 远程调试在服务器(或者其它远程主机)的工程代码。其实就…

html动态网页效果代码_教你制作网页的第一步

Internet中有许多漂亮、美观的网页&#xff0c;要制作出这样的网页&#xff0c;必须先了解什么是网页&#xff0c;网页的基本组成是怎样的。网页又称为Web页&#xff0c;一般都包含图像、文字和超链接等元素。按表现形式的不同&#xff0c;网页可分为静态网页和动态网页。静态网…

Spring Cloud 7:Gateway

Zuul 网关 Zuul 是 Netfilx 开源的一个 API Gateway 服务器&#xff0c;本质是一个 Web Servlet 应用。其在微服务架构体系中提供动态路由、监控、弹性、安全等边缘服务。 使用 Zuul 作为网关&#xff0c;其主要原因有以下几点&#xff1a; 1、Zuul、Ribbon 以及 Consul 客户端…

nodejs开发工程师前景_Google NodeJS运行时团队的工程师Matt Loring访谈

nodejs开发工程师前景by Sameer Khoja通过Sameer Khoja Google NodeJS运行时团队的工程师Matt Loring访谈 (An Interview with Matt Loring, an engineer on Google’s NodeJS Runtime team) I had the pleasure of interviewing Matt Loring (Cornell class of 2015) who wor…

计算机EI期刊2020,2020年Ei Compendex收录的中国期刊目录( JANUARY 1, 2020 )

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼2020年Ei Compendex收录的中国期刊目录更新了&#xff0c;合计222本。本文根据最新 JANUARY 1, 2020 更新《2020年Ei Compendex收录出版物期刊目录》整理&#xff0c;需要提醒&#xff0c;目录EI是不定时更新的&#xff0c;但根据小…

mysql联合索引顺序调整_MySQL 关于联合索引的字段顺序规则讨论

联合索引的顺序&#xff0c;难道不是哪个查询条件最多用就放在前面的吗&#xff1f;比如商品有三个分类A&#xff0c;B&#xff0c;C&#xff0c;类似「界门纲目科属种」那样&#xff0c;越左类别越大。还有一个是商品来源D&#xff0c;不一定会用于查询条件中。举个例子&#…