python小白-day8 socketserver模块

SocketServer模块

SocketServer内部使用 IO多路复用 以及 “多线程” 和 “多进程” ,从而实现并发处理多个客户端请求的Socket服务端。即:每个客户端请求连接到服务器时,Socket服务端都会在服务器是创建一个“线程”或者“进程” 专门负责处理当前客户端的所有请求。


ThreadingTCPServer

ThreadingTCPServer实现的Soket服务器内部会为每个client创建一个 “线程”,该线程用来和客户端进行交互。

1、ThreadingTCPServer基础

使用ThreadingTCPServer:

  • 创建一个继承自 SocketServer.BaseRequestHandler 的类

  • 类中必须定义一个名称为 handle 的方法

  • 启动ThreadingTCPServer

​多并发实例:

服务端:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/env python
import socketserver
class MyTCPHandler(socketserver.BaseRequestHandler):
    def handle(self):  #handle函数必须重新定义
        while True:
            print('new conn:',self.client_address)
            data = self.request.recv(1024)
            if not data:break
            print('client says:',data.decode())
            self.request.send(data)
if __name__ == '__main__':
    host,port = 'localhost',50007
    server = socketserver.ThreadingTCPServer((host,port),MyTCPHandler)
    server.serve_forever()

客户端:

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/env python
import socket
ip_port = ('127.0.0.1',50007)
 
 
sk = socket.socket()
sk.connect(ip_port)
while True:
    user_input = input('>>:')
    sk.send(bytes(user_input,'utf8'))
    server_reply = sk.recv(1024)
    print('server reply:',str(server_reply,'utf8'))
sk.close()




来自为知笔记(Wiz)


posted on 2016-03-13 23:28  显卡  阅读(132)  评论(0编辑  收藏  举报

导航