dotnet核心,控制台应用程序,UDP,为什么没有收到消息?

时间:2019-09-13 16:24:06

标签: .net-core udp

我正在努力获取一个dotnet核心控制台应用程序来接收UDP消息。当我在dotnet框架控制台应用程序中使用相同的代码时,会收到消息,因此我觉得没有什么应阻止它们(例如,防火墙等)。

我尝试使用Visual Studio运行该项目,并发布了发行版,并在命令窗口中使用dotnet运行,但是什么也没收到。没有例外。看起来很简单。我很茫然。任何建议表示赞赏。谢谢。

这是代码:

static void Main(string[] args)
{
    var client = new UdpClient(10006);
    var ipEndPoint = new IPEndPoint(IPAddress.Any, 0);

    var msgReceived = client.Receive(ref ipEndPoint);
    Console.WriteLine($"received '{Encoding.ASCII.GetString(msgReceived)}'");
}

我在这里看到相同/相似的问题,但没有答案: How to send and receive commands from a UDP network server via .NET Core console application

1 个答案:

答案 0 :(得分:0)

确定您确实正在将数据发送到该计算机和端口号。 该代码应该可以正常工作。我把它放在我的Main中,它接收数据。 我使用了线程,因此它们可以处于同一进程中,我没有将其作为单独的进程进行测试。

var threadReceiver = new Thread(() =>
{
    var client = new UdpClient(10006);
    var ipEndPoint = new IPEndPoint(IPAddress.Any, 0);

    var msgReceived = client.Receive(ref ipEndPoint);
    Console.WriteLine($"received '{Encoding.ASCII.GetString(msgReceived)}'");
});



var threadSender = new Thread(() =>
{
    var client = new UdpClient(10007);
    var ipEndPoint = new IPEndPoint(IPAddress.Any, 0);
    var bytes = Encoding.ASCII.GetBytes("this is the data");
    Thread.Sleep(1000);
    var msgReceived = client.Send(bytes, bytes.Length, new IPEndPoint(IPAddress.Parse("127.0.0.1"), 10006)) ;
    Console.WriteLine($"Sent data");
});

threadReceiver.Start();
threadSender.Start();

threadReceiver.Join();

这将输出:

Sent data
received 'this is the data'

我第一次运行此程序时,Windows防火墙要求我允许该流量。我检查了私人和公共网络。您需要确保为连接的网络类型启用了防火墙。检查网络设置以查看Windows认为是公共的还是私有的。您可以在Windows防火墙设置中为该应用程序手动设置防火墙规则。