1. 程式人生 > >Python學習日誌——UDP套接字使用

Python學習日誌——UDP套接字使用

p地址 每次 字節流 無法使用 true ip地址 綁定 CA 發包

UDP的通信雙方也分為客戶端和服務器,但是在個人理解中這方面UDP並沒有嚴格區分,發送請求的為客戶端,響應請求的為服務端。

要在python中使用udp首先要先導入socket

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

上述例子中便創建了一個ipv4、udp套接字,

其中socket.AF_INET為ipv4型,socket.AF_INET6為ipv6型;

socket.SOCK_DGRAM為udp協議,socket.SOCK_STREAM為tcp協議

然後要綁定地址(127.0.0.1為本地ip地址)

host = ‘127.0.0.1‘
port = 7788
s.bind((host, port))

如此綁定了ip地址和端口號,若port端口號缺省,則系統默認分配一個端口給此socket,推薦使用缺省port綁定地址,因為這樣能不避免端口沖突。

data=b‘Hello!‘
s.sendto(data,(‘127.0.0.1,9999‘))

向127.0.0.1端口9999發送數據Hello!

接受數據

while True:
    data, addr = s.recvfrom(1024)

接收數據用套接字的recvfrom方法參數值為每次接受多少字節數據,上述例子中為每次接受1024自己數據,因為並不是每次都能一次接受完所有數據,所有放在循環中。

一般情況下,像是上例的循環接受數據,會約定一個協議,接受什麽樣的數據就結束循環,上例中並沒有寫出。

接受的數據有兩個值,data為對方想要發送的數據,addr為對方的地址 

註意:

發送和接受的數據是字節流,註意編碼和解碼。

廣播

因為UDP的性質,就是向一個地址發包,其他就不管了,並不需要連接,所以有廣播的用法(具體還涉及ip相關知識,這裏不做詳解)

廣播的分組傳送給host ID段所涉及的所有計算機。例如,對於10.1.1.0 (255.255.255.0 )網段,其廣播地址為10.1.1.255 (255 即為2 進制的11111111 )

#dest = (‘192.168.1.255‘,7788)
#要是廣播地址不在dest上,便無法使用
#<broadcast>自動獲得當前廣播地址
dest = (‘<broadcast>‘,7788)
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
#要發送廣播,這句必須有
s.setsockopt(socket.SOL_SOCKET,socket.SO_BROADCAST,1)

之後發送數據如常  

待續

Python學習日誌——UDP套接字使用