zoukankan      html  css  js  c++  java
  • 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()
    
  • 相关阅读:
    简介Doxygen
    以太网的惊人新应用:代替电源线传输电力
    STM32开源开发环境的搭建
    连载第1章绪论 1.1嵌入式系统概述
    连载第2章 嵌入式系统工程设计概述
    STM32固件库详解
    Windows8ConsumerPreview 虚拟机安装与体验
    连载第1章绪论 1.2嵌入式处理器
    通过内存盘提高MSMQ的消息吞吐能力
    使用队列和线程对现有asp.net动态页处理进行资源控制
  • 原文地址:https://www.cnblogs.com/sch01ar/p/8452191.html
Copyright © 2011-2022 走看看