python UDP套接字通訊

lonelyshy發表於2018-10-10

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套接字模型

  • 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

    • 都是阻塞的

相關文章