我正在努力获取一个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
答案 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防火墙设置中为该应用程序手动设置防火墙规则。