UDPserver.py
1 import socket 2 #匯入套接字模組 3 4 s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) 5 # - socket.AF_INET:IPV4 6 # - socket.STREAM:TCP 7 # - socket.DGRAM:UDP 8 9 s.bind((``,25555)) 10 #繫結套接字有效地址和埠 11 #``空位任何地址 本地的127.0.0.1 和區域網還有自己真實的ip 12 print(`[+] Server Open.....`) 13 14 while True: 15 try: 16 data,c_addr = s.recvfrom(1024) 17 #一次性接受1024bytes的資料 ,返回一個元組,其中有資料和地址 18 #UDP不需要構成連線,直接傳送即可 19 print(`from:`,c_addr) 20 #c_addr是一個地址,傳送訊息的客戶端的IP和埠的二元組 21 print(`say:%s`%(data.decode(`utf-8`))) 22 msg = data.decode(`utf-8`) 23 s.sendto(msg.encode(`utf-8`),c_addr) 24 #傳送資訊,其中有兩個引數,一個是資訊,一個是目標地址和埠 25 except KeyboardInterrupt: 26 break 27 28 print(`[+] Server Close......`) 29 s.close
UDPclient.py
1 import socket 2 #匯入套接字模組 3 4 c = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) 5 # - socket.AF_INET:IPV4 6 # - socket.STREAM:TCP 7 # - socket.DGRAM:UDP 8 9 while True: 10 try: 11 msg = input(`>>>`) 12 if msg == 0: 13 #判斷輸入是否為空 就是直接回車了 14 continue 15 #UDP不需要構成連線,直接傳送即可 16 c.sendto(msg.encode(`utf-8`),(`127.0.0.1`,25555)) 17 #傳送訊息,其中兩個引數,第一個是要傳送的資訊 18 #第二個是傳送的ip地址和埠,是一個元組 19 20 data,s_addr = c.recvfrom(1024) 21 22 #c_addr是一個地址,傳送訊息的客戶端的IP和埠的二元組 23 print(`$: %s`%(data.decode(`utf-8`))) 24 except KeyboardInterrupt: 25 break 26 27 c.close()
-
UDP不需要構成連線,直接傳送即可
-
服務端模型:
-
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
-
s.bind((“,25555))
-
data,c_addr = s.recvfrom(1024)
-
別人發來的訊息 就直接發到s服務端套接字了
-
data:發來的資料
-
c_addr:誰發的
-
-
s.sendto(msg, c_addr)
-
-
-
send recv
-
sendto recvfrom
-
都是阻塞的
-