socket(六):使用SocketServer框架搭建客户端,其中涉及有多线程

# -*- coding:utf-8 -*-

'''
SocketServer
    SocketServer 是在socket的基础上python编写的用于编写web服务的基础框架
    python2.x  模块名: SocketServer
    python3.x  模块名: socketerver   模块名字母大小写改变了

socketserver:
        server  服务
            TCPServer: ForkingTCPServer   ThreadingTCPServer
            UDPserver: ForkingUDPServer   ThreadingUDPServer

        handle  句柄 (服务器具体要处理的事情放在句柄里面,相当于一个执行工具)
            STREAMRequestHandler
            DatagramRequestHandrer

如果我们想要使用socketserver编写一个服务器需要server和handle两部分

创建server的方法:
    第一种:直接调用已有的server类
            Forking  多进程
            Threading 多线程
    第二种:自己通过继承重写
            主要用于多线程的server

创建handle的方法:
    BaseRequestHandler
        setup  类似 __init__
        Handle 用来处理请求
            Self.request  当前请求
            Self.client_address 请求用户的IP和端口
            Self.server  当前服务
        Finish  类似__del__
'''
#----------------------------------------------------------------------------
#第一种搭建服务器方法,只重写句柄
#----------------------------------------------------------------------------
import  SocketServer
import threading

#1.重写句柄
class MyHandle(SocketServer.BaseRequestHandler):
    '''
    当前类是要重写一个句柄
    '''
    def setup(self):
        print("this is our server")
    def handle(self):
        '''
        这个方法是用来处理socket请求的
        self.request  请求当前服务
        self.client_address 请求用户的IP和端口
        self.server  当前服务
        '''
        print("%s : %s 已经连接"%self.client_address)
        content = self.request
        recvData = content.recv(512)
        print(recvData)
        content.send(recvData.upper())  #把收到的字符串转化为大写
    def finish(self):
        print('server 完成')

if __name__ == '__main__':
    server = SocketServer.ThreadingTCPServer(("",8000),MyHandle)
    #开启服务的函数server.server_forever
    server_thread = threading.Thread(target= server.serve_forever())
    server_thread.start()
    print("%s is start"%server_thread.name)


#----------------------------------------------------------------------
#第二种,重写server和handle
#----------------------------------------------------------------------

import  SocketServer
import threading

#1.重写句柄
class MyHandle(SocketServer.BaseRequestHandler):
    '''
    当前类是要重写一个句柄
    '''
    def setup(self):
        print("this is our server")
    def handle(self):
        '''
        这个方法是用来处理socket请求的
        self.request  请求当前服务
        self.client_address 请求用户的IP和端口
        self.server  当前服务
        '''
        print("%s : %s 已经连接"%self.client_address)
        content = self.request
        recvData = content.recv(512)
        print(recvData)
        content.send(recvData.upper())  #把收到的字符串转化为大写

#重写sever
class OurServer(SocketServer.ThreadingMixIn,SocketServer.TCPServer):
    '''
    当前是重写一个server
     SocketServer.ThreadingMixIn 是继承多线程的特性
     SocketServer.TCPServer  是继承的TCP服务的特性
     结合就是使当前server拥有多线程TCP特性
     继承顺序不可以改变
    '''
    pass


if __name__ == "__main__":
    server =OurServer(("127.0.0.1",8000),MyHandle) #因为已经改写了server函数,所以这里也要改
    server_thread = threading.Thread(target= server.serve_forever())
    server_thread.start()
    print("%s is start"%server_thread.name)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值