• python之socketserver实现并发


    python之socketserver实现并发

    服务端

    import socketserver
    #socketserver模块是用来实现并发
    #   我们自己的类里一定要继承socketserver.BaseRequestHandler方法
    #   里面需要一个handle方法
    #   每当客户端来连接时,就会创建一个实例,实例与实例之间独立
    #   实例包含
    # self.request:conn          作用:服务端收发信息的对象
    # self.client_address:addr    作用:客户端的ip地址
    class Myserver(socketserver.BaseRequestHandler):
        def handle(self):
            print("conn is:"+str(self.request))
            print("conn is:" + str(self.client_address))
    
            #通讯循环
            while True:
                #收信息
                try:
                    data = self.request.recv(1024).decode('utf-8')
                    if data:
                        print("客户端发过来的信息:" + data)
    
                    # 发信息
                    self.request.sendall(data.upper().encode('utf-8'))
                except Exception as e:
                    continue
    if __name__=="__main__":
        #链接循环
        #这个方法需要两个参数,((ip,port),Myserver)
        s=socketserver.ThreadingTCPServer(('127.0.0.1',8080),Myserver)
        #永远运行
        s.serve_forever()
    
        #socketserver.ThreadingTCPServer()方法循环不端的接收新的连接
        #handle()方法与客户端循环进行通讯

    客户端

    import socket
    
    
    def main():
        ip_port = ('127.0.0.1', 8080)
    
        s2 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
        s2.connect(ip_port)  # 连接服务端
    
        while 1:
            data1 = input("-->").strip()
            if not data1:continue
            if data1 =='quit':break
            s2.sendall(data1.encode('utf8'))
            data2=s2.recv(1024)
            print(data2.decode("utf-8"))
    if __name__ == '__main__':
        main()

    关于socketserver更多的介绍和使用,可以看一下这篇博文:

    https://www.cnblogs.com/Security-Darren/p/4594393.html

  • 相关阅读:
    设计模式-观察者模式
    ps一寸照的编辑
    ps剪切蒙版的使用
    ps扣头发
    mysql索引优化
    ES6 $ ES5
    sping-mybatis集成
    多线程--volatile
    eclipse.exe打开是报错
    Spring Aop 详解二
  • 原文地址:https://www.cnblogs.com/-wenli/p/10707983.html
Copyright © 2020-2023  润新知