zoukankan      html  css  js  c++  java
  • UDP通信

    UDP协议通信

    一、特点

    • 数据报协议(自带报头)
    • 没有双向通道,通信类似于发短信,而TCP协议类似于打电话

    二、简易版

    # 服务端
    import socket
    server = socket.socket(type=socket.SOCK_DGRAM)  # UDP协议
    server.bind(('127.0.0.1',8080))
    # UDP不需要设置半连接池 它也没有半连接池的概念
    
    # 因为没有双向通道  不需要accept  直接就是通信循环
    while True:
        data, addr = server.recvfrom(1024)
        print('数据:',data)  # 客户端发来的消息
        print('地址:',addr)  # 客户端的地址
        server.sendto(data.upper(),addr)
    
    
    # 客户端
    import socket
    client = socket.socket(type=socket.SOCK_DGRAM)
    # 不需要建立连接  直接进入通信循环
    server_address = ('127.0.0.1',8080)
    while True:
        client.sendto(b'hello',server_address)
        data, addr = client.recvfrom(1024)
        print('服务端发来的数据',data)
        print('服务端的地址',addr)
    

    三、UDP与TCP之间的区别

    • UDP协议客户端允许发空
    • UDP协议不会粘包
    • UDP协议服务端不存在的情况下,客户端照样不会报错
    • UDP协议支持并发

    四、UDP实现简易版本QQ

    # 服务端
    import socket
    server = socket.socket(type=socket.SOCK_DGRAM)
    server.bind(('127.0.0.1',8080))
    while True:
        data, addr = server.recvfrom(1024)
        print(data.decode('utf-8'))
        msg = input('>>>:')
        server.sendto(msg.encode('utf-8'),addr)
        
    # 客户端1
    import socket
    client = socket.socket(type=socket.SOCK_DGRAM)
    server_address = ('127.0.0.1',8080)
    
    while True:
        msg = input('>>>:')
        msg = '来自客户端1的消息:%s'%msg
        client.sendto(msg.encode('utf-8'),server_address)
        data, server_addr = client.recvfrom(1024)
        print(data.decode('utf-8'))
    
    # 客户端2
    import socket
    client = socket.socket(type=socket.SOCK_DGRAM)
    server_address = ('127.0.0.1',8080)
    
    while True:
        msg = input('>>>:')
        msg = '来自客户端2的消息:%s'%msg
        client.sendto(msg.encode('utf-8'),server_address)
        data, server_addr = client.recvfrom(1024)
        print(data.decode('utf-8'))
    
    # 客户端3
    import socket
    client = socket.socket(type=socket.SOCK_DGRAM)
    server_address = ('127.0.0.1',8080)
    
    while True:
        msg = input('>>>:')
        msg = '来自客户端3的消息:%s'%msg
        client.sendto(msg.encode('utf-8'),server_address)
        data, server_addr = client.recvfrom(1024)
        print(data.decode('utf-8'))
        
    # 客户端4
    import socket
    client = socket.socket(type=socket.SOCK_DGRAM)
    server_address = ('127.0.0.1',8080)
    
    while True:
        msg = input('>>>:')
        msg = '来自客户端4的消息:%s'%msg
        client.sendto(msg.encode('utf-8'),server_address)
        data, server_addr = client.recvfrom(1024)
        print(data.decode('utf-8'))
        
    # 客户端5
    import socket
    client = socket.socket(type=socket.SOCK_DGRAM)
    server_address = ('127.0.0.1',8080)
    
    while True:
        msg = input('>>>:')
        msg = '来自客户端5的消息:%s'%msg
        client.sendto(msg.encode('utf-8'),server_address)
        data, server_addr = client.recvfrom(1024)
        print(data.decode('utf-8'))
    
  • 相关阅读:
    [React Hooks长文总结系列三]为所欲为,制作“穷人版”的redux
    [React Hooks长文总结系列二]渐入佳境,性能调优与自定义钩子
    [React Hooks长文总结系列一]初出茅庐,状态与副作用
    EsModule VS CommonJS
    [清代八股文]Promise如何实现串行执行
    React Fiber基本工作原理
    深入剖析setState同步异步机制
    破译《碟中谍》经典画面,解密指纹验证+刷脸!
    如何测试重签名的应用功能是否正常
    图像处理之滤镜、图文排版的开发详解,从入门到起飞
  • 原文地址:https://www.cnblogs.com/DcentMan/p/11380547.html
Copyright © 2011-2022 走看看