1.源码class

1.server类:处理链接
+------------+
| BaseServer |
+------------+
|
v
+-----------+ +------------------+
| TCPServer |------->| UnixStreamServer |
+-----------+ +------------------+
|
v
+-----------+ +--------------------+
| UDPServer |------->| UnixDatagramServer |
+-----------+ +--------------------+ 1)进程类
+------------+
| BaseServer |
+------------+
|
v
+------------+
| TCPServer |
+------------+
|
v
+------------+ +------------------+
| ForkingMixIn| | UDPServer |
+-----------+ +------------------+
| |
v v 备注此类继承ForkingMixIn和TCPServer
+------------------+ +--------------------+
| ForkingUDPServer | | ForkingTCPServer |
+----------------+ +--------------------+ 2)线程类
+------------+
| BaseServer |
+------------+
|
v
+------------+
| TCPServer |
+------------+
|
v
+-----------+ +------------------+
| ThreadingMixIn| | UDPServer |
+-----------+ +------------------+
| |
v v 备注此类继承ThreadingMixIn和ThreadServer
+------------------+ +--------------------+
| ThreadingUDPServer | | ThreadingTCPServer |
+----------------+ +--------------------+ 2.request类: 处理通信
+-------------------------------------------+
| BaseRequestHandler |
+------------------------------------------+
| |
v v
+--------------------+ +----------------------+
| StreamRequestHandler| |DatagramRequestHandler|
+--------------------+ +-----------------------+ '''

2.创建socketserver步骤

创建一个socketserver 至少分以下几步:

    First, you must create a request handler class by subclassing the BaseRequestHandlerclass and overriding its handle() method; this method will process incoming requests.   

    Second, you must instantiate one of the server classes, passing it the server’s address and the request handler class.

    Then call the handle_request() orserve_forever() method of the server object to process one or many requests.

    Finally, call server_close() to close the socket.

3.简单实例

#!/usr/bin/python env
# coding:utf-8 import socketserver ip_port = ('127.0.0.1', 800) '''
def __init__(self, request, client_address, server):
self.request = request
self.client_address = client_address
self.server = server
self.setup()
try:
self.handle()
finally:
self.finish()
''' # tcp服务端并发
class MyServer(socketserver.BaseRequestHandler):
def handle(self):
print('conn is: ', self.request) # conn 链接
print('addr is: ', self.client_address) # addr 客户端地址
conn = self.request
client_address = self.client_address while True: # 通信循环
try: # 处理client端端口 报出的异常
data = conn.recv(1024)
if not data: break # 处理接受数据为空,无限循环
print('客户端发来的信息是:', data.decode('utf-8'), client_address)
self.request.sendall(data)
except Exception as e:
print(e)
break if __name__ == '__main__':
s = socketserver.ThreadingTCPServer(ip_port, MyServer) # 多线程 连接循环 通信循环套在连接循环中
# s = socketserver.Forkingip_port,MyServer) #多进程 连接循环 通信循环套在连接循环中 s.serve_forever() # 客户端
from socket import * ip_port = ("127.0.0.1", 800)
back_log = 10
buffer_size = 1024 tcp_client = socket(AF_INET, SOCK_STREAM)
tcp_client.connect(ip_port) while True:
msg = input(">>: ")
if not msg: continue # 解决输入空数据问题
tcp_client.send(msg.encode("utf-8"))
data = tcp_client.recv(back_log) print("客户端发来信息:", data.decode("utf-8")) tcp_client.close()

python 并发socketserver模块的更多相关文章

  1. python 39 socketserver 模块并发通信

    socketserver模块 socketserver模块实现一个服务端与多个客户端通信.是在socket的基础上进行了一层封装,底层还是调用的socket. socketserver干了两件事: 1 ...

  2. 浅析python中socketserver模块使用

    虽然说用python编写简单的网络程序狠方便,但是复杂一点的网络程序还是用现成的框架比较好,这样就可以专心事物逻辑,而不是套接字的各种细节.Socketserver模块简化了编写网络服务程序,同时so ...

  3. Python之socketserver模块和验证客户端链接的合法性

    验证客户端链接的合法性 分布式系统中实现一个简单的客户端链接认证功能 #_*_coding:utf-8_*_ from socket import * import hmac,os secret_ke ...

  4. python之 socketserver模块的使用

    在我们正常的使用socket模块来写一个server的程序就会显得比较的复杂通常一般流程为 1.生成socket实例对象 2.绑定地址 3.开始监听 4.接收数据 一般demo为 # 服务器 impo ...

  5. Python网络编程(3)——SocketServer模块与简单并发服务器

    主要类型 该模块有四个比较主要的类,其中常用的是 TCPServer 和 UDPServer. 1. TCPServer 2. UDPServer 3. UnixStreamServer,类似于TCP ...

  6. Python进阶----UDP协议使用socket通信,socketserver模块实现并发

    Python进阶----UDP协议使用socket通信,socketserver模块实现并发 一丶基于UDP协议的socket 实现UDP协议传输数据 代码如下:

  7. Python网络编程(2)-粘包现象及socketserver模块实现TCP并发

    1. 基于Tcp的远程调用命令实现 很多人应该都使用过Xshell工具,这是一个远程连接工具,通过上面的知识,就可以模拟出Xshell远程连接服务器并调用命令的功能. Tcp服务端代码如下: impo ...

  8. python之socketserver实现并发

    python之socketserver实现并发 服务端 import socketserver #socketserver模块是用来实现并发 # 我们自己的类里一定要继承socketserver.Ba ...

  9. python 网络编程之socket开发和socketserver模块

    一 客户端/服务器架构 1.硬件C/S架构(打印机) 2.软件C/S架构 互联网中处处是C/S架构 如黄色网站是服务端,你的浏览器是客户端(B/S架构也是C/S架构的一种) 腾讯作为服务端为你提供视频 ...

随机推荐

  1. [性能测试]:关于MQ协议脚本开发

    消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过写和检索出入列队的针对应用程序的数据(消息)来通信,而无需专用连接来链接它们. 银行脚本使用MQ通信的较多,下面介绍一个MQ的脚本: M ...

  2. Java简易撞鬼游戏demo

    9*9方格内两点随机行走,相遇则停止. public class 撞鬼 { public static int length = 9; public static char[][] matrix = ...

  3. 【Kafka】Producer配置

    名称 描述 类型 默认值 bootstrap.servers kafka集群地址,ip+端口,以逗号隔开.不管这边配置的是什么服务器,客户端会使用所有的服务器.配置的列表只会影响初始发现所有主机.配置 ...

  4. 利用IDEA创建Web Service服务端和客户端的详细过程

    创建服务端 一.file–>new–>project 二.点击next后输入服务端名,点击finish,生成目录如下 三.在 HelloWorld.Java 文件中右击,选 WebServ ...

  5. PHP 中 strlen 获取中英 字符长度 以作以后对比使用

    ANSII编码: 1 长度是3 a 长度是3 ? 长度是3 我 长度是4 ?长度是2 ---------------------------- UTF-8编码: 1 长度是1 a长度是1 ? 长度是1 ...

  6. 关于clear与清除浮动

    今天看bootstrap突然看到了 .container:after { clear: both; } 好像对clear的用法有点模糊,于是于是又研究一下用法. 上面搜资料总会搜到张鑫旭老师的相关文章 ...

  7. 多线程编程(一)-Semaphore(信号量)的使用

    Semaphore的介绍 单词Semaphore的中文含义就是信号.信号系统的意思,此类的主要作用就是限制线程并发的数量. 举个例子,一个屋子里有10个人,但只有一个窄门可以出去,这个窄门一次最多只能 ...

  8. [心平气和读经典]The TCP/IP Guide(000)

    The TCP/IP Guide [Page 39] The TCP/IP Guide: Introduction and "Guide to The Guide" | 第1章 概 ...

  9. Lenovo笔记本Fn的总结

    Fn与其他按键结合使用以访问特殊的ThinkPad功能. Fn+F2  锁定计算机 Fn+F3 管理电池和电源 Fn+F4 进入睡眠(待机)模式 Fn+F5 管理无线连接 Fn+F6 打印屏幕 Fn+ ...

  10. 完美世界-Java游戏开发-二面

    时间:2017-03-30 时长:15分 类型:二面 面试官比较聊得来,人比较和善,游戏面试还是nice的,老铁 1. 自我介绍 2. 平时玩哪些游戏?端游.页游 3. Maven你是怎么使用的? 4 ...