zoukankan      html  css  js  c++  java
  • 基于socketserver实现并发tcp、udp

    1.基于socketserver实现并发-tcp

    #服务端
    import socketserver
    
    
    class MyHandler(socketserver.BaseRequestHandler):
        def handle(self):
    
            #print(self.client_address) #客户端地址
            #print(self.request)        ##self.request=conn  套接字对象
            while True:
                try:
                    data = self.request.recv(1024)
                    if len(data) == 0: break
                    print()
                    self.request.send(data.upper())
    
                except ConnectionResetError:
                    break
    
    
    if __name__ == '__main__':
        s = socketserver.ThreadingTCPServer(('127.0.0.1', 8080), MyHandler, bind_and_activate=True)
        s.serve_forever() #代表连接循环
        #循环建立连接,每建立一个连接就会启动一个线程+调用MyHandler类产生一个对象,
        #该对象下面的handle方法,专门与刚刚建立好的连接做通信循环 #客户端地址
            #print(self.request)        ##self.request=conn  套接字对象
            while True:
                try:
                    data = self.request.recv(1024)
                    if len(data) == 0: break
                    print()
                    self.request.send(data.upper())
    
                except ConnectionResetError:
                    break
    
    
    if __name__ == '__main__':
        s = socketserver.ThreadingTCPServer(('127.0.0.1', 8080), MyHandler, bind_and_activate=True)
        s.serve_forever() #代表连接循环
        #循环建立连接,每建立一个连接就会启动一个线程+调用MyHandler类产生一个对象,
        #该对象下面的handle方法,专门与刚刚建立好的连接做通信循环
    #客户端
    import socket
    
    phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    
    phone.connect(('127.0.0.1',8080))
    
    while True:
        msg=input(">>>>>>>>>>>>>").strip()
        if len(msg)==0:continue
        phone.send(msg.encode('utf-8'))
        data=phone.recv(1024)
        print(data)
    phone.close()

    1.基于socketserver实现并发-ucp

    #服务端
    import socketserver
    
    
    class MyHandeler(socketserver.BaseRequestHandler):
        def handle(self):
            data = self.request[0]   #request是个元组,元组的第一个是数据,第二个是一个套接字对象
            print('消息', data)
            self.request[1].sendto(data.upper(), self.client_address)  #self.request[1] 是套接字对象
    
    
    if __name__ == '__main__':
        s = socketserver.ThreadingUDPServer(('127.0.0.1', 8080), MyHandeler)
        s.serve_forever()
    #request是个元组,元组的第一个是数据,第二个是一个套接字对象
            print('消息', data)
            self.request[1].sendto(data.upper(), self.client_address)  #self.request[1] 是套接字对象
    
    
    if __name__ == '__main__':
        s = socketserver.ThreadingUDPServer(('127.0.0.1', 8080), MyHandeler)
        s.serve_forever()
    
    #客户端
    
    import socket
    client=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    while True:
        msg=input('>>>>>>>').strip()
        #msg='111111111111'
        client.sendto(msg.encode('utf-8'),('127.0.0.1',8080))
        data,server_addr=client.recvfrom(1024)
        print(data)
    
    client.close()
  • 相关阅读:
    vue前端使用JsonViewer进行json展示
    vue代理服务器proxy配置
    'vue-cli-service' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
    Python中的高阶函数和内置高阶函数(abs,map,reduce,sorted,filter)
    Ant Design Vue 通过v-decorator实现数据绑定
    Vue脚手架(vue-cli)搭建和目录结构详解
    如何使用Postman从XML提取变量
    【已解决】Vue格式化js自动加上冒号和分号
    vue.js安装与搭建
    Python函数中如何返回多个值?
  • 原文地址:https://www.cnblogs.com/Marcki/p/10111934.html
Copyright © 2011-2022 走看看