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. Tree-AC训练实录

    Tree-AC比赛记录 2018 ICPC nanjing     Bronze  120/310 ICPC qingdao    Bronze  153/360 2019 ZJPSC        ...

  2. 关于Vue中main.js,App.vue,index.html之间关系进行总结

    在初始化的Vue项目中,我们最先接触到的就是main.js,App.vue,index.html这三个文件,我们从培训视频或者官方文档上可以了解到: index.html---主页,项目入口 App. ...

  3. c# timer使用

    C#里现在有3个Timer类: System.Windows.Forms.Timer System.Threading.Timer System.Timers.Timer 这三个Timer我想大家对S ...

  4. Mac 10.12安装图片标注工具PxCook

    说明:现在基本是PxCook最好用,其余都是收费的,并且支持Android标注dp,主要是用于App开发时坐标定位,求到比例等等. 下载: (链接: https://pan.baidu.com/s/1 ...

  5. Array对象的判定

    /* 关于JS对象类型的判断,最复杂的在于RegExp和Array了,判定RegExp的情形不较少,而Array就比较多了,下面就是判断Array的方法 */ //方法一:利用instanceof来判 ...

  6. 【Kafka】Kafka数据可靠性深度解读

    转帖:http://www.infoq.com/cn/articles/depth-interpretation-of-kafka-data-reliability Kafka起初是由LinkedIn ...

  7. io流之转换流InputStreamReader、OutputStreamWriter

    例子程序: package io; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.File ...

  8. Android中Handler的使用方法及实例(基础回顾)

    Handler使用例1 这个例子是最简单的介绍handler使用的,是将handler绑定到它所建立的线程中.本次实验完成的功能是:单击Start按钮,程序会开始启动线程,并且线程程序完成后延时1s会 ...

  9. Android AES加密工具类实现(基础回顾)

    package com.powercreator.cms.util; import java.security.SecureRandom; import javax.crypto.Cipher; im ...

  10. PHP之mb_strstr使用

    mb_strstr (PHP 5 >= 5.2.0, PHP 7) mb_strstr - Finds first occurrence of a string within another 查 ...