python3 最簡單的網絡編程udp(socket數據包datagram)


UDP 不是基於連接的、是不連續的、 不可靠的、 效率⽐較⾼。 更像是寄信, 今⼉⼀封, 明⼉⼀封.,想啥時候發什么時候發。不管收件人收到還是沒收到。
Internet 協議集支持一個無連接的傳輸協議,該協議稱為用戶數據報協議(UDP,User Datagram Protocol)。

 

服務器端

import socket


sk = socket.socket(type=socket.SOCK_DGRAM)  # 創建socket對象(udp類型) DGRAM數據包datagram
sk.bind(("192.168.36.106", 8888))  # 綁定IP和端口
while 1:
    msg, address = sk.recvfrom(1024)  # 接受客戶端發來的消息,udp必須是客戶端先發送消息
    print(f"來自客戶端的消息:{msg.decode('utf-8')}")
    if msg.decode("utf-8").upper() == "BYE":
        break
    sk.sendto(input(">>>:").strip().encode("utf-8"), address)  # 發送消息
sk.close()

UDP服務端

  1、導入socket模塊

  2、創建socket對象(UDP類型)

  3、綁定IP地址和端口

  4、接收來自客戶端的消息

  5、發送消息給客戶端

  6、關閉socket對象 

 

客戶端

import socket


sk = socket.socket(type=socket.SOCK_DGRAM)  # 創建socket對象(udp類型)
while 1:
    sk.sendto(input(">>>:").strip().encode("utf-8"), ("192.168.36.106", 8888))  # udp必須是客戶端先發送數據
    msg, address = sk.recvfrom(1024)
    print(f"來自服務端的消息:{msg.decode('utf-8')}")
    if msg.decode("utf-8").upper() == "BYE":
        break
sk.close()

 UDP客戶端

  1、導入socket模塊

  2、創建socket對象(UDP類型)

  3、發送消息給服務端

  4、接收來自服務端的消息

  5、關閉socket對象

 

注意:

  1、先啟動服務端,再啟動客戶端。

  2、切記客戶端先發送,服務端收到消息和客戶端地址,才能給客戶端發送消息。

 

為什么tcp和udp兩種協議的端口可以相同?

  操作系統當然有能力根據接受的報文的IP字段里面的協議部分判斷這個報文是什么報文,就是說,系統讀數據的時候還沒有讀到上層報文(TCP/UDP)的時候已經知道上層是什么報文了,直接交給相關的內核進程或協議棧處理就可以了。而在同一個協議內部端口號唯一。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM