標籤:小結 通過 .so 直接 學習 優點 post 連接埠 不可
本章將介紹UDP編程,更多內容請參考:Python學習指南
TCP是建立可靠串連,並且通訊雙方都可以以流的形式發送資料。相對TCP串連,UDP則是面向不需連線的協議。
使用UDP協議時,不需要建立串連,只需要知道對方的IP地址和連接埠號碼,就可以直接發送資料包,但是,能不能到達就不知道了。
雖然用UDP傳輸資料不可靠,但它的優點是和TCP比,速度快,對於不要求可靠到達的資料,就可以使用UDP協議。
我們來看看如何通過UDP協議傳輸資料。和TCP類似,使用UDP的通訊雙方也分為用戶端和伺服器。伺服器首先需要綁定連接埠:
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()給伺服器發資料:
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()方法。
小結
UDP的使用和TCP類似,但是不需要建立串連,此外,伺服器綁定UDP連接埠和TCP連接埠互補衝突,也就是說,UDP的連接埠與TCP的9999連接埠可以各自綁定。
Python網路_UDP編程