簡體   English   中英

UDP 套接字沒有收到任何帶有 python 的消息

[英]UDP Socket is not receiving any message with python

我正在嘗試通過 UDP 套接字將消息從 Raspberry Pi(Ubuntu 20)發送到筆記本電腦(Virtualbox Ubuntu 20)。 所以我使用來自https://wiki.python.org/moin/UdpCommunication的簡單代碼

發送(來自樹莓派)

import socket

UDP_IP = "127.0.0.1"
UDP_PORT = 5005
MESSAGE = b"Hello, World!"

print("UDP target IP: %s" % UDP_IP)
print("UDP target port: %s" % UDP_PORT)
print("message: %s" % MESSAGE)

sock = socket.socket(socket.AF_INET, # Internet
                     socket.SOCK_DGRAM) # UDP
sock.sendto(MESSAGE, (UDP_IP, UDP_PORT))

接收(從筆記本電腦)

import socket

UDP_IP = "127.0.0.1"
UDP_PORT = 5005

sock = socket.socket(socket.AF_INET, # Internet
                     socket.SOCK_DGRAM) # UDP
sock.bind((UDP_IP, UDP_PORT))

while True:
    data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes
    print("received message: %s" % data)

我在兩端都嘗試UDP_IP = "0.0.0.0" 我在 RPI 端嘗試了筆記本電腦的 Ip 地址。 我在兩端都嘗試了兩台機器的 IP 地址。 我試過sock.bind(("", UDP_PORT))綁定所有。 我嘗試在防火牆設置中添加 UDP 端口號。 我檢查了這個論壇上與此相關的多個問題。

盡管如此,我還是無法在筆記本電腦接收端收到任何數據包。 我不知道出了什么問題。 請指教。

問題可能出在 IP 地址中,因為您使用 IP '127.0.0.1' (localhost) 來訪問外部設備。 請找出您設備的 IP,嘗試使用 ifconfig Linux 命令。 另外,請檢查是否沒有任何東西阻止您的連接。

考慮到對於 socket.bind(address) 你可以使用 '0.0.0.0' 而對於 socket.sendto(bytes, address) 你應該使用你想要發送到的設備的 IP。

我建議你下載一個名為 Hercules 的程序,使用這個程序你可以創建一個 UDP 對等體來找出什么是不正常的。 例如,您可以在一側使用 python 並在另一側使用 Hercules 以排除代碼執行一側的錯誤,您也可以嘗試兩個 Hercules 連接,看看是否可以建立通信,在這種情況下問題很可能與問題有關對於代碼執行,另一方面,如果您無法在兩個 Hercules UDP 對等點之間建立連接,則問題很可能與設備或網絡本身有關。

如果您在 RPi 上使用 static IP,則需要添加 static 路由:

sudo ip route add 236.0.0.0/8 dev eth0

確保您使用的端口在 windows 10 中啟用了 UDP。

要打開任何 UDP 端口,您可以執行以下操作:

  1. Go 到控制面板> 系統和安全和 Windows 防火牆。
  2. 高級設置 > 右鍵單擊入站規則和 select 新規則。
  3. 添加要打開的端口,然后單擊下一步。
  4. Select UDP 協議和端口號進入下一個 window 並單擊下一步。
  5. Select 允許連接並點擊下一步。
  6. Select 網絡類型並單擊下一步。
  7. 為規則命名,然后單擊完成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM