[英]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.