美文网首页
Python - UDP通信

Python - UDP通信

作者: 断尾壁虎V | 来源:发表于2018-02-05 15:30 被阅读0次

    UDP通信原理

    由于UDP协议不是基于链接的协议,所以在发送数据的时候不需要建立链接。在数据的每一次发送和接收的时候,都需要发送UDP报头,指定接收端的IP和端口信息。效率与TCP相比更高。使用UDP的常见服务如DNS,FTP等。
    UDP数据包一般包含512个字节,当大于512字节时,可能会出现传输不稳定的情况。

    示例:

    # 服务端
    # coding=utf-8
    import socket
    server=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # 基于网络的数据报协议 UDP
    server.bind(('127.0.0.1',8080))
    
    while True:
        msg,addr=server.recvfrom(1024)
        print(msg,addr)
        server.sendto(msg.upper(),addr)
        
        
    
    # 客户端
    #_*_coding:utf-8_*_
    
    import socket
    
    client=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    
    while True:
        msg=input('>>: ').strip()
        if not msg:continue
    
        client.sendto(msg.encode('utf-8'),('127.0.0.1', 8080))
    
        back_msg,addr=client.recvfrom(1024)
        print(back_msg.decode('utf-8'),addr)
    
    
    • UDP每个发送的数据都含所有自身的报头,不像TCP那样是流式的数据,所以不存在粘包现象。

    • udp的recvfrom是阻塞的,一个recvfrom(x)必须对唯一一个sendto(y),收完了x个字节的数据就算完成,若是y>x数据就丢失,这意味着udp根本不会粘包,但是会丢数据,不可靠。

    • tcp 协议的数据不会丢,没有收完的包下一次会接着收取上一次没收完的数据,本端总是在收到ack时才会清除缓冲区内容。数据是可靠的,但是会粘包。

    相关文章

      网友评论

          本文标题:Python - UDP通信

          本文链接:https://www.haomeiwen.com/subject/vwwbzxtx.html