• Server socket


    用法都一样

    区别:  self.request  

      TCP  self.requsst 代表具体的链接

      UDP  self.requst 代表一个小元组(元组里面: 第一个元素 客户端发来的数据 ,第二个元素  回复客户端的套接字对象)

    基于UDP:

    import socketserver
    from threading import current_thread
    # fork linux下一个多进程接口 windows没有这接口
    # 用于处理请求的类
    
    class MyHandler(socketserver.BaseRequestHandler):
        def handle(self):
            print(self)
            print(self.server)  # 获取封装的服务器对象
            print(self.client_address)# 客户端地址
            print(self.request)# 是一个元祖 包含收到的数据 和服务器端的socket
            # data,client = self.request
    
            data = self.request[0]
            print(data.decode("utf-8"))
            self.request[1].sendto(b"i am server",self.client_address)
    
    server = socketserver.ThreadingUDPServer(("127.0.0.1",9999),MyHandler)
    server.serve_forever()
    
    
    
    # ThreadingUDPServer  在初始化的时候创建了socket对象
    # serve_forever() 将sockt注册到select(多路复用的)
    # select中返回一个ready  如果为True则可以处理 _handle_request_noblock   内部创建了一个MyHandler的示例  调用了handler函数
    
    #  使用了socket  OOP  多线程
    
    # 正常开发中 如果并发量不大 就是用socketserver
    # 否则用协程
    
    
    
    
    
    """
    使用时的区别:
    ThreadingTCPServer
        handler 在连接成功时执行
        self.request 是客户端的socket对象  
        
    ThreadingUDPServer
        handler 接收到数据时执行
        self.request  数据和服务器端的socket对象 
    
    
    """
    server
    #基于TCP 客户端
    import socket
    c  =  socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    addr = (('127.0.0.1',2020))
    # c.connect(addr)
    while True:
        msg = input('>>>: ')
        c.sendto(msg.encode('utf-8'),addr)
    
        print(c.recvfrom(1024)[0].decode('utf-8'))
    client

    基于TCP:

    import socketserver
    from threading import current_thread
    # fork linux下一个多进程接口 windows没有这接口
    
    # 用于处理请求的类
    class MyHandler(socketserver.BaseRequestHandler):
        def handle(self):
            print(self)
            print(self.server)  # 获取封装的服务器对象
            print(self.client_address)# 客户端地址
            print(self.request)# 获取客户端的socket对象
            print(current_thread())
            while True:
                data = self.request.recv(1024)
                print(data.decode("utf-8"))
                self.request.send(data.upper())
    
    
    server = socketserver.ThreadingTCPServer(("127.0.0.1",9999),MyHandler)
    server.serve_forever()
    server
    #基于TCP 客户端
    import socket
    c  =  socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    addr = (('127.0.0.1',2020))
    c.connect(addr)
    while True:
        msg = input('>>>: ')
        c.send(msg.encode('utf-8'))
    
        print(c.recv(1024).decode('utf-8'))
    client
  • 相关阅读:
    你的系统需要做系统集成测试么?
    测试驱动 ASP.NET MVC 和构建可测试 ASP.NET MVC 应用程序
    RikMigrations 或 Migrator.NET 进行自动化的数据库升级
    单元测试
    C#反射
    J2EE--Struts2基础开发
    Dynamics CRM 客户端的插件调试
    于快速创建 IEqualityComparer<T> 实例的类 Equality<T>
    ToolBox Analysis & Design
    实现$.fn.extend 和$.extend函数
  • 原文地址:https://www.cnblogs.com/TF511/p/9965741.html
Copyright © 2020-2023  润新知