C#:UDP客户端无法从一台机器工作到另一台机器

C#:UDP客户端无法从一台机器工作到另一台机器,c#,networking,udp,C#,Networking,Udp,我想通过UDP从一台机器到另一台机器交换信息。然而,由于某些原因,它不起作用 此代码在机器1上运行,即接收器(192.168.200.1): 当我在两台机器上启动程序时,我希望在机器1的控制台窗口中看到“接收到的内容”。然而,这并没有发生。 我看到UDP数据包通过WireShark离开机器2。 机器1也可以看到该数据包;我也在那个上面运行WireShark。但机器1上的应用程序未显示响应 我在同一台计算机上运行了这两个程序(192.168.200.2,因此是机器2)。程序1可以启动,但程序2需要

我想通过UDP从一台机器到另一台机器交换信息。然而,由于某些原因,它不起作用

此代码在机器1上运行,即接收器(192.168.200.1):

当我在两台机器上启动程序时,我希望在机器1的控制台窗口中看到“接收到的内容”。然而,这并没有发生。 我看到UDP数据包通过WireShark离开机器2。 机器1也可以看到该数据包;我也在那个上面运行WireShark。但机器1上的应用程序未显示响应

我在同一台计算机上运行了这两个程序(192.168.200.2,因此是机器2)。程序1可以启动,但程序2需要稍作修改:行:IPEndPoint remote=new IPEndPoint。。。当然需要包含本地机器的IP地址;我在程序2中的评论中指出了这一点。所以这句话是:

IPEndPoint remote = new IPEndPoint(IPAddress.Parse("192.168.200.2"), 44444);
当我这样做时,字符串'Something received'就出现了

因此,看起来编程是正确的(请注意,我最小化了代码;这是重现我遇到的问题的最小项目)。否则,我不会看到它在一台机器上同时运行两个程序。 发送方应用程序可能也是正确的,因为UDP数据包从一台机器传输到另一台机器(至少,我在WireShark输出上看到了在两台机器上运行的UDP数据包)。 但无论如何,当数据包在另一台机器上运行时,接收方不会得到数据包

当您第一次运行接收器时,很可能会收到防火墙警告。我点击了“允许”

我还在另一台机器上尝试了这两个程序(更新地址后)。它在这里也起作用。从一台机器到另一台机器,从一台机器到另一台机器都在工作:什么也没有


我真的被这件事缠住了。有人知道这方面的线索吗?我忘了什么吗?我正在两台机器上运行Win7 64位上的控制台应用程序。我使用VS 2012。

我发现必须为防火墙添加两条规则:

  • 一份供你申请;因此,您必须指定名称
  • 一个用于端口和协议
  • 如果你把两者都加上,它就会起作用。
    如果只添加其中一个,则该操作无效。我认为添加应用程序的名称就足够了。

    另外,删除轮询循环。是的,你是对的,但上面的代码是为了演示问题。我开发的应用程序也不是控制台应用程序。我试图通过写最小化的项目来证明这个问题。我同意,这并不总是最好的代码。
    static void Main(string[] args)
        {
            Console.WriteLine("Small delay so that listeners can prepare...");
            Thread.Sleep(5000);
            Console.WriteLine("Sending packet...");
            IPEndPoint local = new IPEndPoint(IPAddress.Parse("192.168.200.2"), 0);
            IPEndPoint remote = new IPEndPoint(IPAddress.Parse("192.168.200.1"), 44444); // When changed to 192.168.200.2 and run receiver local, it works
            UdpClient udpClient = new UdpClient(local);
            byte[] bytes = Encoding.ASCII.GetBytes("abcdefghijklmnopqrstuvwxyz");
            udpClient.Send(bytes, bytes.Length, remote);
            Console.Write("Done, press any key...");
            Console.ReadKey();
        }
    
    IPEndPoint remote = new IPEndPoint(IPAddress.Parse("192.168.200.2"), 44444);