• Python Day32:UDP协议、UDP与TCP协议的区别、以及其服务端、客户端标准代码


    ## UDP协议
    
    UDP通讯流程图
    
    ## ![image-20181206164635501](https://ws4.sinaimg.cn/large/006tNbRwly1fxx4ditf86j30fp0a6q3u.jpg)
    
    ```python
    udp是无链接的,先启动哪一端都不会报错,即使对方地址根本不存在也不会报错,强制关闭任何一方也没有任何问题,另外,由于无连接的特点,服务器不需要针对摸个客户端进行循环,只要循环的接收即可,谁发来的消息都可以被处理
    
    ```
    
    ## UDP和TCP区别:
    
    ```python
    TCP:
        建立连接:三次握手。
        可靠得数据传输,发送方没有收到接收方确认收到得消息,重复发送至报错
        数据发送是基于字节流的、有拥塞控制的
        会发生粘包
        只能一对一通信
        
    UDP:不需要建立连接,绑定id/端口号直接发送。
        不可靠传输,不管接受方是否收到信息。
        数据发送是基于包的,没有拥塞控制
        不会发生粘包,数据包有明确界限。
        支持一对一、一对多、多对多交互通讯
    TCP适用于,需要确保数据安全、完整到达得,比如支付、文本传输等
    
    UDP适用于,需要实时、传输效率高的场景,比如视频通话、游戏。
    
    ```
    
    ## UDP服务端
    
    ```python
    import socket
    ip_port=('127.0.0.1',8081)
    udp_server_sock=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #买手机
    udp_server_sock.bind(ip_port)
    
    while True:
        qq_msg,addr=udp_server_sock.recvfrom(1024)
        print('来自[%s:%s]的一条消息:33[1;44m%s33[0m' %(addr[0],addr[1],qq_msg.decode('utf-8')))
        back_msg=input('回复消息: ').strip()
        udp_server_sock.sendto(back_msg.encode('utf-8'),addr)
    ```
    
    ## UDP客户端
    
    ```python
    import socket
    BUFSIZE=1024
    udp_client_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    
    qq_name_dic={
        '狗哥':('127.0.0.1',8081),
        '天线宝宝':('127.0.0.1',8081),
        '巴拉巴拉小魔女':('127.0.0.1',8081),
        '王尼玛':('127.0.0.1',8081),
    }
    
    while True:
        qq_name=input('请选择聊天对象: ').strip()
        while True:
            msg=input('请输入消息,回车发送: ').strip()
            if msg == 'quit':break
            if not msg or not qq_name or qq_name not in qq_name_dic:continue
            udp_client_socket.sendto(msg.encode('utf-8'),qq_name_dic[qq_name])
            back_msg,addr=udp_client_socket.recvfrom(BUFSIZE)
            print('来自[%s:%s]的一条消息:33[1;44m%s33[0m' %(addr[0],addr[1],back_msg.decode('utf-8')))
    udp_client_socket.close()
    
    ```
  • 相关阅读:
    对象访问方式
    GC回收的对象
    邮件工具类
    java内存区域
    RabbitMQ的安装
    Flask信号
    DBUtils数据库连接池
    Flask蓝图基本使用
    Flask中使用cookie和session
    Flask中的CBV
  • 原文地址:https://www.cnblogs.com/huhongpeng/p/10960234.html
Copyright © 2020-2023  润新知