【问题标题】:Unable to receive UDP packets无法接收 UDP 数据包
【发布时间】:2016-07-24 18:05:29
【问题描述】:

我正在尝试使用两个单独的程序从同一台机器发送和接收 UDP 数据包,但到目前为止我还没有收到任何东西。我已经尝试完全关闭我的防火墙,但仍然没有奏效。

发送程序

var sender = new UdpClient(Dns.GetHostName(), 2055);

var data = new byte[] { 0, 1, 2, 3, 4, 5 };
sender.Send(data, data.Length);

接收程序

var receiver = new UdpClient(2055);

var endPoint = new IPEndPoint(IPAddress.Any, 2055);
var data = receiver.Receive(ref endPoint);
System.Console.WriteLine("Data received");

我什至复制并粘贴了本教程 http://www.codeproject.com/Articles/10649/An-Introduction-to-Socket-Programming-in-NET-using 中的代码,但仍然没有成功。

【问题讨论】:

  • 什么是Dns.GetHostName()?不应该是127.0.0.1吗?
  • 啊,这成功了!您能否发布一个答案(以便我可以选择它作为解决方案)并解释一下为什么它有效而不是 Dns.GetHostName()?我在同一台机器上通过 TCP 连接很好地使用了 GetHostName()。
  • 当然,很高兴我们能够提供帮助:)

标签: c# .net networking udp


【解决方案1】:

问题出在var sender = new UdpClient(Dns.GetHostName(), 2055);

您需要指定本地主机 IP,即 127.0.0.1,因为您在同一台机器上。这应该有效:

var sender = new UdpClient("127.0.0.1", 2055);

【讨论】:

    【解决方案2】:

    来自About multicast IP addresses and ports (TechNet)

    多播 IP 地址是属于两个范围内的 D 类地址:224.0.0.0 到 239.255.255.255 和 FF00:0000:0000:0000:0000:0000:0000:0000 到 FFFF: FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF。第一个范围内的地址是 Internet 协议版本 4 (IPv4) 地址。第二个范围内的地址是 Internet 协议版本 6 (IPv6) 地址。

    对于 Intranet 使用,建议您使用 239...* 范围内的 IPv4 地址。端口号的范围在 1 到 65535 之间。用于传输内容的网络上的路由器必须启用多播,这意味着它们必须能够解释 D 类地址,否则它们将无法转发您的多播信息给客户。

    由于网络级过滤,您必须使用此范围内的 IP 地址。维基百科上有一张commonly-used multicast addresses 的表格。

    实际上,您正在使用的教程也说明了这一点:

    UDP 还支持多播,即将一个数据报发送到多个接收者。为此,发送方将数据包发送到 224.0.0.1 – 239.255.255.255(D 类地址组)范围内的 IP 地址。

    【讨论】:

    • 感谢您的回答,但我不确定这如何解决我在同一台机器上发送/接收的问题,特别是因为使用本地主机地址可以解决问题。
    猜你喜欢
    • 2013-11-08
    • 2011-03-02
    • 2015-11-26
    • 2014-12-13
    • 1970-01-01
    • 2022-11-02
    • 1970-01-01
    • 2012-06-03
    • 2015-02-17
    相关资源
    最近更新 更多