• socketserver 实现并发


    server.py

    # socketserver 实现并发
    import socketserver
    class MyServer(socketserver.BaseRequestHandler):    # 继承socketserver.BaseRequestHandler这个类
        def handle(self):      # 必须定义handle方法
            print('conn is:', self.request)     # self.request双向连接信息
            print('addr is', self.client_address)   # self.client_address客户端地址及端口
    
            while True:     # 通信循环
                try:    # 如果客户端强制退出,会报错,则需要做异常处理
                    # 收消息
                    data = self.request.recv(1024)
                    if not data:break   # 如果收到为空会卡住,则跳出循环
                    print('客户端收到的消息是', data)
    
                    # 发消息
                    self.request.sendall(data.upper())  # 将客户端发的信息大写后发给客户端,使用sendall相当于循环使用send直到把所有数据都发送完毕
    
                except Exception as e:
                    print(e)
                    break
    
    if __name__ == '__main__':
        s = socketserver.ThreadingTCPServer(('127.0.0.1', 8080), MyServer)  # 开启多线程tcp服务
        s.serve_forever()   # 运行服务端

    client.py

    from socket import *
    
    ip_port = ('127.0.0.1', 8080)
    back_log = 5
    buff_size = 1024
    
    tcp_client = socket(AF_INET, SOCK_STREAM)
    tcp_client.connect(ip_port)
    
    while True:
        msg = input('>>:').strip()
        if not msg: continue
        if msg == 'quit': break
    
        tcp_client.send(msg.encode('utf-8'))
    
        data = tcp_client.recv(buff_size)
        print('收到服务端发来的消息:', data.decode('utf-8'))
    
    tcp_client.close()

     udp服务端(不常用)

    import socketserver
    
    class MyServer(socketserver.BaseRequestHandler):
        def handle(self):
            print(self.request)
            print('收到客户端的消息是',self.request[0])
            self.request[1].sendto(self.request[0].upper(),self.client_address)
    
    
    if __name__ == '__main__':
        s=socketserver.ThreadingUDPServer(('127.0.0.1',8080),MyServer) #多线程
        s.serve_forever()
  • 相关阅读:
    QTP 11.05下载并完成+皴
    ZOJ Monthly, June 2014 月赛BCDEFGH题题解
    Linux makefile 教程 很具体,且易懂
    oracle中imp命令具体解释
    html5实现摇一摇
    AfxMessageBox和MessageBox差别
    Android传感器概述(六)
    线性代数之矩阵与坐标系的转换
    測试新浪微博@小冰 为代码机器人的一些方法
    破解中国电信华为无线猫路由(HG522-C)自己主动拨号+不限电脑数+iTV
  • 原文地址:https://www.cnblogs.com/dangrui0725/p/9484735.html
Copyright © 2020-2023  润新知