python3--udp/TCP笔记和实践
UDP协议:
UDP (User Datagram Protocol, 用户数据报协议) 是一种无连接,不可靠,基于数据的传输层通信协议。
UDP的通信过程与TCP相比比较为简单, 不需要复杂的三次握手四次挥手,提现了无连接;
UDP传输速度比TCP快, 但容易丢包,数据到达准确性无保证, 缺乏拥塞控制, 秉承尽最大努力交付的远着,提现了不可靠;
UDP的无连接与不可靠特性注定无法采用字节流的通信模式,由协议名中[Datagram] 与socket类型中的[SOCK_DGRAM]即可提现他基于数据报的通信模式。
#服务端 import socket #第一个参数为 socket.AF_INET,代表采用 IPv4 协议用于网络通信, # 第二个参数为 socket.SOCK_DGRAM,代表采用 UDP 协议用于无连接的网络通信。 soc = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #服务端才需要绑定IP和端口 soc.bind("127.0.0.1",6000) print("udp bound on port 6000") while True: data, addr = soc.recvfrom("1024") print("receive:%s %s"%(addr, data)) if data == b"exit": soc.sendto(b"goodbye", addr) continue soc.sendto(b"hello %s "% data,addr) soc.close()
#客户端 sclient = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) addr = ("127.0.0.1",6000) while True: data = input("please enter a word:") if not data: continue sclient.sendto(data.encode(), addr) responese, addr = sclient.recvfrom(1024) print(responese.decode) if responese == b'exit': print("sesion is over from %s : %s"%addr) breakpoint() sclient.close()
非常详细的UDP解析,来自:
https://www.freebuf.com/column/175176.html