Python SocketServer

日常打卡,很激动实现了第一个服务器demo,虽然是书中给出的例子,且对于SocketServer各个方法不甚了解。但是没办法,依旧高兴得不能自已
附上书中给出的代码

import logging
import sys
import SocketServer
logging.basicConfig(level=logging.DEBUG,
                    format='%(name)s : %(message)s',
                    )

class EchoRequestHandler(SocketServer.BaseRequestHandler):
    def __init__(self,request,client_address,server):
        self.logger = logging.getLogger('EchoRequestHandler')
        self.logger.debug('__init__')
        SocketServer.BaseRequestHandler.__init__(self,request,client_address,server)

        return

    def setup(self):
        self.logger.debug('setup')
        return SocketServer.BaseRequestHandler.setup(self)

    def handle(self):
        self.logger.debug('handle')
        data = self.request.recv(1024)
        self.logger.debug('recv()->"%s"',data)
        self.request.send(data)

    def finish(self):
        self.logger.debug('finish')
        return SocketServer.BaseRequestHandler.finish(self)

class EchoServer(SocketServer.TCPServer):
    def __init__(self,server_address,
                 handler_class=EchoRequestHandler):
        self.logger = logging.getLogger('EchoServer')
        self.logger.debug('__init__')
        SocketServer.TCPServer.__init__(self,server_address,handler_class)

        return
    def server_activate(self):
        self.logger.debug('server_activate')
        SocketServer.TCPServer.server_activate(self)
        return
    def serve_forever(self, poll_interval=0.5):
        self.logger.debug('Waiting for request')
        self.logger.info('Handle requests , press<Ctrl-C> to quit')
        SocketServer.TCPServer.serve_forever(self)
        return

    def handle_request(self):
        self.logger.debug('handle_request')
        return SocketServer.TCPServer.handle_request(self)

    def verify_request(self, request, client_address):
        self.logger.debug('verify_request(%s,%s)',
                          request,client_address)
        return SocketServer.TCPServer.verify_request(self,request,client_address)

    def process_request(self, request, client_address):
        self.logger.debug('process_request(%s,%s)',
                          request,client_address)
        return SocketServer.TCPServer.process_request(self,request,client_address)

    def server_close(self):
        self.logger.debug('server_close')
        return SocketServer.TCPServer.server_close(self)

    def finish_request(self, request, client_address):
        self.logger.debug('finis_request(%s ,%s)',
                          request,client_address)
        return SocketServer.TCPServer.finish_request(self,request,client_address)

    def close_request(self, request_address):
        self.logger.debug('close_request(%s)',request_address)
        return SocketServer.TCPServer.close_request(self,request_address)

    def shutdown(self):
        self.logger.debug('shutdown()')
        return SocketServer.TCPServer.shutdown(self)

if __name__ == '__main__':
    import socket
    import threading
    address = ('localhost',0)
    server = EchoServer(address,EchoRequestHandler)
    ip,port = server.server_address
    t = threading.Thread(target=server.serve_forever)
    t.setDaemon(True)
    t.start()

    logger = logging.getLogger('client')
    logger.info('Server on %s,%s',ip,port)

    logger.debug('creating socket')
    s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    logger.debug('connecting to server')
    s.connect((ip,port))
    message = 'Hello World!!!!!!!!'
    logger.debug('sending data: "%s"',message)
    len_sent = s.send(message)

    logger.debug('waiting for the message')
    response = s.recv(len_sent)
    logger.debug('response from server: "%s"',response)


    server.shutdown()
    logger.debug('closing socket')
    s.close()
    logger.debug('done')
    server.socket.close()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值