Python3-socketserver模块-网络服务器框架

Python3中的socketserver模块简化了编写网络服务器的任务

  在实际的开发中,特别是多并发的情况下,socket模块显然对我们的用处不大,因为如果你要通过socket模块来实现并发的socket通信,简直太麻烦了,socketserver模块则是Python提供给你的现成的接口,你只需要编写少量的代码,就可以实现你的需求

  首先,您必须通过对BaseRequestHandler类进行子类化并覆盖其handle()方法来创建请求处理程序类;此方法将处理传入请求。其次,您必须实例化一个服务器类,将它传递给服务器的地址和请求处理程序类。然后调用服务器对象的handle_request()serve_forever()方法来处理一个或多个请求。最后,调用server_close()关闭套接字

import socketserver


class ThreadedTCPRequestHandler(socketserver.BaseRequestHandler):
    """
    必须继承BaseRequestHandler类,重写handle()方法
    """
    def handle(self):
        result = self.request.recv(1024)
        data = str(result, 'utf-8')
        print(data)
        rep_msg = input(">>>")
        self.request.send(bytes(rep_msg, "utf-8"))

# 运行服务
if __name__ == "__main__":
    HOST, PORT = "127.0.0.1", 9999
    # 根据需要实例化相应的类,并提供地址和实现的请求处理类
    # class socketserver.ForkingTCPServer
    # class socketserver.ForkingUDPServer
    # class socketserver.ThreadingTCPServer
    # class socketserver.ThreadingUDPServer
    server = socketserver.ThreadingTCPServer((HOST, PORT), ThreadedTCPRequestHandler)
    server.serve_forever()
服务端

import socket

HOST, PORT = "127.0.0.1", 9999
while True:
    with socket.socket() as sk_client:
        sk_client.connect((HOST, PORT))
        req_msg = input(">>>")
        sk_client.send(bytes(req_msg, 'utf8'))
        rep_msg = sk_client.recv(1024)
        print(str(rep_msg, "utf-8"))
客户端

参考资料

  http://python.usyiyi.cn/translate/python_352/library/socketserver.html

  

posted on 2017-04-13 11:28  AustralGeek  阅读(365)  评论(0编辑  收藏  举报

导航