Python網絡_UDP編程
阿新 • • 發佈:2018-01-28
網絡 for lis dto 數據包 udp編程 ive bind source 方法返回數據和客戶端的地址和端口,這樣,服務器收到數據後,直接調用
本章將介紹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編程