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. linux 命令 htop & 重定向 top, bashrc文件

    最近在用linux服务器跑程序,有几条linux命令还蛮重要的,总结一下: 1. 直接跑代码: python test.py 2. 若想程序在后台跑,即使本地和服务器断开也能运行: nohup pyt ...

  2. C#常用总结《一》

    集合类常用: List<T> 泛型集合 Dictionary<key,value>  字典集合 文件读取: FileStream :对各种文件读写,字节处理更好 StreamR ...

  3. DGIS之遥感影像数据获取

    1.概要 在GIS圈的同行或多或少接触过遥感,记得在大学老师就说过"数据是GIS的核心".本文介绍在国内下载遥感影像的方法. 地理空间数据云,这个是中科院计算机网络中心建设的一个免 ...

  4. c# java数据类型不同点

    导读:C#和Java是当今最火热的两门面向对象编程语言,很多程序都是既开发Java,也涉足C#.不得不说这两门编程语言有很多共同点,这里主要比较一下Java和C#数据类型的不同之处,这些小的区别有时甚 ...

  5. Mac 10.12安装远程桌面工具TeamViewer

    说明:个人使用时免费的,虽然启动时有弹框,但是不影响使用. 下载: https://www.teamviewer.com/zhCN/

  6. JVectorMap地图插件.Net版开源

    jVectorMap地图插件只要浏览器技术JavaScript.CSS,HTML,SVG或VML就可以浏览使用,不需要Flash或其他专有的浏览 器插件.所以jVectorMap在所有现代移动浏览器上 ...

  7. ECharts概念学习系列之ECharts是什么?

    不多说,直接上干货! http://echarts.baidu.com/index.html http://echarts.baidu.com/echarts2/index.html 开源的EChar ...

  8. DFT,可测试性设计--概念理解

    工程会接触DFT.需要了解DFT知识,但不需要深入. 三种基本的测试(概念来自参考文档): 1. 边界扫描测试:Boundary Scan Test: 测试目标是IO-PAD,利用JTAG接口互连以方 ...

  9. [转]SAP模块一句话入门

    本文转自:http://www.cnblogs.com/mybi/archive/2010/12/20/1911154.html SAP一句话入门:Financial & Controllin ...

  10. DataGridView 获取当前单元格

    获取DataGridview控件中的当前单元格,是通过DataGridview的Rows属性和Column属性的索引来取得的,他们的索引都是从0开始的. Private void datagridvi ...