本章將介紹UDP編程,更多內容請參考:Python學習指南html
TCP是創建可靠鏈接,而且通訊雙方均可以以流的形式發送數據。相對TCP鏈接,UDP則是面向無鏈接的協議。python
使用UDP協議時,不須要創建鏈接,只須要知道對方的IP地址和端口號,就能夠直接發送數據包,可是,能不能到達就不知道了。編程
雖然用UDP傳輸數據不可靠,但它的優勢是和TCP比,速度快,對於不要求可靠到達的數據,就能夠使用UDP協議。服務器
咱們來看看如何經過UDP協議傳輸數據。和TCP相似,使用UDP的通訊雙方也分爲客戶端和服務器。服務器首先須要綁定端口:socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) #綁定端口 s.bind('127.0.0.1', 9999)
建立socket時,SOCK_DGRAM
指定了這個Socket的類型是UDP。綁定端口和TCP同樣,可是不須要調用listen()
方法,而是直接接收來自任何客戶端的數據:學習
print('Bind UDP on 9999...') while True: #接收數據 data, addr = s.recvfrom(1024) print('Received from %s:%s'%addr) s.sendto(b'Hello,%s!'%data)
recvfrom()
方法返回數據和客戶端的地址和端口,這樣,服務器收到數據後,直接調用sendto()
就能夠調用connect()
,直接經過sendto()
給服務器發數據:code
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) for data in [b'chenqi', b'xiaoqi', b'miqi']: #發送數據 s.sendto(data, ('127.0.0.1', 9999)) #接收數據 print(s.recv(1024).decode('utf-8')) s.close()
客戶端接收數據仍然調用recv()
方法。htm
UDP的使用和TCP相似,可是不須要創建鏈接,此外,服務器綁定UDP端口和TCP端口互補衝突,也就是說,UDP的端口與TCP的9999端口能夠各自綁定。blog