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()
  • 相关阅读:
    更新的OPENCV资料
    单通道图像的直方图(C/C++源代码)
    Java2下Applet数字签名具体实现方法
    采用HVS的图像相似度准则计算WPSNR
    彩色图像分割的FLOOD FILL方法(源代码)
    数字图像的直方图均衡化(C/C++源代码)
    彩色图像分割的FLOOD FILL方法(源代码)
    14、C++ Primer 4th 笔记,迭代器
    16、C++ Primer 4th 笔记,static(静态)类成员
    12、C++ Primer 4th 笔记,关联容器(2)
  • 原文地址:https://www.cnblogs.com/Marcki/p/10111934.html
Copyright © 2011-2022 走看看