UDP是无连接的socket通信,UDP通信不需要在交换数据之前,进行像TCP那样的三次握手。UDP通信很直接,socket创建了之后,直接就发数据,也不管对方能不能收到。看起来好像UDP通信一无是处,但是别忘了,DNS服务就是用UDP的53号端口。
这种简单的,无连接的,没有接收确认的UDP通信,也有它适合的应用场景。比如发送语音和视频这类重传无意义的流媒体数据。又比如调试单板,电脑直连一块板子,这个时候就没有必要使用TCP,TFTP就是属于这类。
本文介绍一组UDP服务器和客户端的代码,实际测试通过,并说明服务器的监听地址这个重要细节。
UDP服务器代码
用Python来写UDP服务器代码,非常简单,如下:
import socket
address = ('192.168.1.100', 12345) # 0.0.0.0 may be better
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(address)
while True:
data, addr = s.recvfrom(2048)
print("received:", data.decode(), "from", addr)
# use s.sendto() and addr to send data back
s.close()
我们只需要引入socket模块,创建UDP socket对象s,然后bind绑定地址address。address是一个IP和Port