zoukankan      html  css  js  c++  java
  • SocketServer-实现并发处理3

    用socketserver创建一个服务的步骤:

    1  创建一个request handler class(请求处理类),合理选择StreamRequestHandler和DatagramRequestHandler之中的一个作为父类(当然,使用BaseRequestHandler作为父类也可),并重写它的handle()方法。

    2  实例化一个server class(服务类)对象,并将服务的地址和之前创建的request handler class传递给它。

    3  调用server class对象的handle_request() 或 serve_forever()方法来开始处理请求。

    服务器端代码:

    import socketserver
    
    class MyTCPHandler(socketserver.BaseRequestHandler): #自己写的请求处理类,每个客户端的请求过来,都会实例它。MyTCPHandler
    
        def handle(self): #重写请求处理类的handle(),跟客户端所有的交互都是在handle里完成的。
            while True:
                try:
                    self.data = self.request.recv(1024).strip()
                    print("{} wrote:".format(self.client_address[0])) #打印客户端的IP地址
                    print(self.data)
    
                    self.request.sendall(self.data.upper()) #变成大写,传回给客户端。
                except ConnectionResetError as e:
                    print('Error is: ',e) #客户端断开时抛出的异常
                    break
    
    if __name__ == "__main__":
        HOST, PORT = "localhost", 9999
        server = socketserver.ThreadingTCPServer((HOST, PORT), MyTCPHandler) #实例化一个server class(服务类)对象,并将服务的地址和之前创建的request handler class传递给它
        server.serve_forever() #调用server class对象的serve_forever()方法来开始处理请求。处理多个请求。
    

     客户端代码:

    import socket
    client=socket.socket()
    client.connect(('localhost',9999))
    while True:
        msg=input(">>:").strip()
        if len(msg)==0:continue
        client.send(msg.encode('utf-8'))
        data=client.recv(1024)
        print("recv:",data.decode())
    client.close()
    
  • 相关阅读:
    React的状态管理工具
    Ant Design
    Mac 10.12安装专业抓包工具Wireshark
    Mac 10.12安装飞鸽传书IPMessager
    Mac 10.12安装XMind
    Mac 10.12安装SVN工具SmartSVM 7.6
    Mac 10.12安装Windows远程桌面工具Microsoft Remote Desktop
    Mac 10.12安装Office 2011
    Mac 10.12安装迅雷2.7.2
    Mac 10.12安装虚拟机软件VMware Fusion 12
  • 原文地址:https://www.cnblogs.com/momo8238/p/7326376.html
Copyright © 2011-2022 走看看