• Python-SocketServer


    建立一个SocketServer,首先要创建一个请求处理类,这个类要继承BaseRequestHandler,还要重写父类里handle()方法,handle()方法在父类中为空的

    然后实例化TCPServer,并且传递server ip和创建的请求处理类给这个TCPServer

    服务器端

    # -*-coding:utf-8-*-
    __author__ = "MuT6 Sch01aR"
    
    import socketserver,socket
    
    class MyTCPHandler(socketserver.BaseRequestHandler): #创建请求处理类,继承BaseRequestHandler
        def handle(self): #重写父类里handle()方法
            while True:
                try:
                  self.data = self.request.recv(1024).strip()
                  print('来自',self.client_address[0])
                  print(self.data)
                  self.request.send(self.data)
                except socket.error:
                    print('客户端断开连接')
                    break
    
    if __name__ == "__main__":
        HOST, PORT = "localhost", 9999
        server = socketserver.TCPServer((HOST, PORT), MyTCPHandler) #实例化TCPServer
        # server = socketserver.UDPServer((HOST, PORT), MyTCPHandler) #实例化UDPServer
        server.serve_forever() #处理多个请求,一直执行
        # servser.handle_request() #只处理一个请求
    

    客户端

    # -*- coding:utf-8 -*-
    __author__ = "MuT6 Sch01aR"
    
    import socket
    
    s = socket.socket()
    s.connect(('localhost', 9999))
    while True:
        cmd = input('>>>:').strip()
        if len(cmd) == 0:continue
        s.send(cmd.encode('utf-8'))
        print(s.recv(1024))
    s.close()
    

    运行结果

    但是还是不能实现多个连接进行socket通信

    socketserver多并发

    服务器端

    # -*-coding:utf-8-*-
    __author__ = "MuT6 Sch01aR"
    
    import socketserver,socket
    
    class MyTCPHandler(socketserver.BaseRequestHandler):
        def handle(self):
            while True:
                try:
                  self.data = self.request.recv(1024).strip()
                  print('来自',self.client_address[0])
                  print(self.data)
                  self.request.send(self.data)
                except socket.error:
                    print('客户端断开连接')
                    break
    
    if __name__ == "__main__":
        HOST, PORT = "localhost", 9999
        server = socketserver.ThreadingTCPServer((HOST, PORT), MyTCPHandler) #通过多线程实现TCPServer多并发
        #server = socketserver.ForkingTCPServer((HOST, PORT), MyTCPHandler) #通过多进程实现TCPServer多并发
        #server = socketserver.ThreadingUDPServer((HOST, PORT), MyTCPHandler) #通过多线程实现UDPServer多并发
        #server = socketserver.ForkingUDPServer((HOST, PORT), MyTCPHandler) #通过多线程实现UDPServer多并发
        server.serve_forever()
    

    windows系统还不能用多进程进行socketserver多并发

    客户端

    # -*- coding:utf-8 -*-
    __author__ = "MuT6 Sch01aR"
    
    import socket
    
    s = socket.socket()
    s.connect(('localhost', 9999))
    while True:
        cmd = input('>>>:').strip()
        if len(cmd) == 0:continue
        s.send(cmd.encode('utf-8'))
        print(s.recv(1024))
    s.close()
    
  • 相关阅读:
    Windows 本地计算机免安装 MySQL 数据库(zip 包)
    搭建SVN+Apache+SVNmanager
    「解读」华为云桌面究竟有何厉害之处
    华为云会议的前世今生
    CentOS 8 在线安装zabbix
    我是如何被我的大创项目榨干的
    我要怎么提升/优化 回归模型?
    20211909 202120222 《网络攻防实践》第六周作业
    20211904 202120222 《网络攻防实践》第五次作业
    npm、yarn、pnpm区别
  • 原文地址:https://www.cnblogs.com/sch01ar/p/8452191.html
Copyright © 2020-2023  润新知