簡體   English   中英

將UDP消息從C#廣播到Python

[英]Broadcasting UDP message from C# to Python

我正在嘗試將廣播消息從一台計算機上的C#應用​​程序發送到另一台計算機上的Python腳本。 如果我將Python機器的IP指定為端點,則可以發送一條消息。 這是我發送消息的方式:

const int PORT = 12345;
using (var sock = new UdpClient())
{
    var endpoint = new IPEndPoint(IPAddress.Parse(remoteIP), PORT);
    //var endpoint = new IPEndPoint(IPAddress.Broadcast, PORT);

    byte[] bytes = Encoding.UTF8.GetBytes("hello, world!");
    sock.Send(bytes, bytes.Length, endpoint);
}

在Python方面,我收到如下信息:

import socket
PORT = 12345

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(('', PORT))
#sock.bind(('<broadcast>', PORT))

while 1:
    data,addr = sock.recvfrom(1024)
    if not data: break
    print(data)

我可以將消息從一台計算機成功發送到另一台計算機。 但是,我有多台要發送消息的機器(UDP廣播),但是當我使用IPAddress.Broadcast作為端點時,Python無法接收到消息。 我還嘗試將Python套接字綁定到<broadcast> ,但這無濟於事,並且綁定到C#機器的IP會給我錯誤error socket.gaierror: [Errno -3] Temporary failure in name resolution

我不知道這是C#無法發送廣播還是Python無法接收廣播的問題。

您可以使用諸如Wireshark之​​類的網絡分析器來驗證網絡代碼的運行。 我懷疑如果這樣做,您會發現實際上沒有設置廣播數據報。

缺少一個好的,完整的代碼示例 ,很難確定原因是什么。 但這是最有可能的原因,因為您尚未為套接字設置Socket.EnableBroadcast屬性。 它的默認值為false ,如果未設置為true ,則即使您發送到廣播地址,也不會發送廣播數據報。

暫無
暫無

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

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