码迷,mamicode.com
首页 > 编程语言 > 详细

python小白-day8 socketserver模块

时间:2016-03-14 00:12:56      阅读:245      评论:0      收藏:0      [点我收藏+]

标签:

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()






python小白-day8 socketserver模块

标签:

原文地址:http://www.cnblogs.com/hetan/p/5274219.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!