[英]Not receiving UDP message on local machine
所以我有两台机器,一台笔记本电脑和一个树莓派 4。我试图从我的笔记本电脑向 pi 发送 UDP 个数据包。
C# 在笔记本电脑上运行的代码:
public static void SendMessage(string msg, IPEndPoint endPoint)
{
using (UdpClient client = new())
{
var message = Encoding.ASCII.GetBytes(msg);
client.Send(message, message.Length, endPoint);
}
}
我在 Main() 中调用它:
static void Main(string[] args)
{
new Thread(()=>
{
while (true)
{
for (int i = 0; i < 256; i++)
Networking.UDP.SendMessage("Hello World!", new IPEndPoint(IPAddress.Parse($"192.168.1.{i}"), 11000));
Console.WriteLine("Message sent");
Thread.Sleep(1000);
}
}).Start();
}
在树莓派上,我正在运行这个简单的 python 脚本:
import socket
hostname = socket.gethostname()
local_ip = socket.gethostbyname(hostname)
local_port = 11000
UDPsocket = socket.socket(family=socket.AF_INET, type=socket.SOCK_DGRAM)
UDPsocket.bind((local_ip, local_port))
print("Now listening on port "+str(local_port))
while (True):
bytesAddressPair = UDPsocket.recvfrom(1024)
message = bytesAddressPair[0]
address = bytesAddressPair[1]
print(str(address)+" : "+str(message))
但是,树莓派程序似乎没有收到任何消息。 我究竟做错了什么?
(编辑:对此答案的第一条评论解释了原因)
弄清楚了。 在 pi 上,为了获得我正在使用的本地 IP
socket.gethostbyname(socket.gethostname())
这显然不是获取本地 IP 的正确方法。有人可能会进一步解释为什么没有产生正确的结果。 为了解决这个问题,我只是在 pi 上运行hostname -I
以找到正确的本地 IP 并在代码中使用它,最终接收代码为:
import socket
local_ip = "192.168.1.10" #Your local IP here obtained from terminal
local_port = 11000
UDPsocket = socket.socket(family=socket.AF_INET, type=socket.SOCK_DGRAM)
UDPsocket.bind((local_ip, local_port))
print("Now listening on port "+str(local_port))
while (True):
bytesAddressPair = UDPsocket.recvfrom(1024)
message = bytesAddressPair[0]
address = bytesAddressPair[1]
print(str(address)+" : "+str(message))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.