繁体   English   中英

在本地机器上未收到 UDP 消息

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM