发送UDP广播,接收多条消息

Paw*_*sen 38 c# udp broadcasting

我有2个程序,1个用于发送UDP广播消息,1个用于监听此广播.我的问题是,有时当我发送广播时,接收器会收到2条消息.为什么?

接收者代码:

public class Receiver {
  private readonly UdpClient udp = new UdpClient(15000);
  private void StartListening()
  {
    this.udp.BeginReceive(Receive, new object());
  }
  private void Receive(IAsyncResult ar)
  {
    IPEndPoint ip = new IPEndPoint(IPAddress.Any, 15000);
    byte[] bytes = udp.EndReceive(ar, ref ip);
    string message = Encoding.ASCII.GetString(bytes);
    StartListening();
  }
}
Run Code Online (Sandbox Code Playgroud)

发件人代码:

public class Sender {
  public void Send() {
    UdpClient client = new UdpClient();
    IPEndPoint ip = new IPEndPoint(IPAddress.Broadcast, 15000);
    byte[] bytes = Encoding.ASCII.GetBytes("Foo");
    client.Send(bytes, bytes.Length, ip);
    client.Close();
  }
}
Run Code Online (Sandbox Code Playgroud)

Eug*_*sev 30

严格来说,IP网络中的数据包重复是允许的网络行为,你必须能够在你的软件中处理它,即使你这次会以某种方式摆脱它.如果您只是想知道为什么在您的特定情况下会发生这种情况......乍一看,我发现您的代码没有任何问题.您是否在计算机的以太网端口上有多个IP地址?我认为wireshark可能有助于获得有关正在发生的事情的更多细节.

  • 你的问题得到了解答.当我通过电缆连接时,我的笔记本电脑的无线功能已打开.所以我通过有线和无线接收了包裹.谢谢. (8认同)

And*_*ndy 6

UDP数据包不可靠,完全有可能你会获得相同的数据包两次甚至根本没有,当使用udp时,你需要在数据中包含某种唯一的ID,这样你就可以丢弃错误或请求重新发送.