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

python---socketserver模块

时间:2016-07-23 19:30:11      阅读:328      评论:0      收藏:0      [点我收藏+]

标签:

在《python---socket模块》中通过socket模块实现了串行处理的socket通信

在python中可以通过socketserver模块实现并发通信,而socketserver之所以能实现并发,是通过IO多路复用多进程、多线程实现的

 

下面是使用socketserver模块实现多线程并发处理请求的示例

 

服务器端

技术分享
#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = zhoufeng

import socketserver

class MyServer(socketserver.BaseRequestHandler):  #自定义请求处理类,继承自BaseRequestHandler类
    def handle(self):  #重写handle方法,BaseRequestHandler中的handle方法为空
        conn=self.request  #建立一个通信连接,类似socket模块中的accept方法
        conn.sendall(bytes(欢迎致电 10086,请输入xxx,encoding=utf8))   #发送比特形式的数据


        while True:
            data=conn.recv(1024)   #接收数据
            print([%s] says:%s %(self.client_address,data.decode()))     #client_address表示客户端地址
            conn.sendall(data.upper())      #发送数据


if __name__==__main__:
    #ThreadingTCPServer类有两个参数,一个套接字元组,一个请求处理类
    #套接字元组(‘127.0.0.1‘,8009)
    #这里的请求处理类是我们自定义的MyServer
    #请求处理类也可以是BaseRequestHandler的派生类StreamRequestHandler和DatagramRequestHandler
    #每过来一个请求,就会生成一个server实例(可以理解为一个线程)
    server=socketserver.ThreadingTCPServer((127.0.0.1,8009),MyServer)
    #serve_forever方法是什么作用?
    server.serve_forever()
View Code

 

客户端

技术分享
#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = zhoufeng

import socket
ip_port=(127.0.0.1,8009)
s=socket.socket()
s.connect(ip_port)
welcome_msg=s.recv(1024)

print("from server:",welcome_msg.decode())

while True:
    #发消息
    send_data=input(">>: ").strip()
    if len(send_data)==0:continue
    s.sendall(bytes(send_data,encoding=utf8))

    #收消息
    recv_data=s.recv(1024)
    print(str(recv_data,encoding=utf-8))

s.close()
View Code

 

python---socketserver模块

标签:

原文地址:http://www.cnblogs.com/zhoufeng1989/p/5699319.html

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