Python學習筆記__16.3章 UDP編程
1、概覽
TCP是建立可靠連接,並且通信雙方都可以以流的形式發送數據。相對TCP,UDP則是面向無連接的協議。
使用UDP協議時,不需要建立連接,只需要知道對方的IP地址和端口號,就可以直接發數據包。但是,能不能到達就不知道了。
雖然用UDP傳輸數據不可靠,但它的優點是和TCP比,速度快,對於不要求可靠到達的數據,就可以使用UDP協議。
和TCP類似,使用UDP的通信雙方也分為客戶端和服務器。
1.1、server端
import threading,time,socket
def tcplink(sock, addr,data):
sock.sendto(('Hello, %s!' % data.decode('utf-8')).encode('utf-8'),addr)
print('Connection from %s:%s closed.' % addr) # 提示消息
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 創建socket對象
s.bind(('127.0.0.1', 9999)) # 綁定端口
print('Bind UDP on 9999...')
while True:
# 服務端用recvfrom()方法返回數據和客戶端的地址與端口
# 這樣,服務器收到數據後,直接調用sendto()就可以把數據用UDP發給客戶端
data, addr = s.recvfrom(1024)
print('Received from %s:%s.' % addr)
t=threading.Thread(target=tcplink,args=(s,addr,data))
t.start()
1.2、client端
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
for data in [b'Michael', b'Tracy', b'Sarah']:
s.sendto(data, ('127.0.0.1', 9999))
# 接收數據,客戶端接收數據還是用recv()方法
print(s.recv(1024).decode('utf-8'))
s.close()
結果:
可以看到,UDP是發一次數據建立一次連接
1.3、小結
UDP的使用與TCP類似,但是不需要建立連接。此外,服務器綁定UDP端口和TCP端口互不沖突,也就是說,UDP的9999端口與TCP的9999端口可以各自綁定。
Python學習筆記__16.3章 UDP編程