通过UDP的广播是重复发送其数据包还是只发送一次?

时间:2012-03-06 18:43:30

标签: c# network-programming udp broadcast

使用C#,通过UDP重播是否会重复发送其数据包,还是只发送一次?

之前我从未使用过这项技术,我想通过局域网暂时广播一小部分信息(一个小的一行字符串)。如果接收端没有准备好,广播会重复播放还是一次性播放?我正在使用的代码来自here。所以我想在一台机器上启动Broadcaster,几分钟后启动接收器并检索广播公司发送的内容。

这是代码

using System;  
using System.Net;  
using System.Net.Sockets;  
using System.Text;  
class Broadcst  
{  
  public static void Main()  
  {  
   Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram,  
                ProtocolType.Udp);  
   IPEndPoint iep1 = new IPEndPoint(IPAddress.Broadcast, 9050);  
   IPEndPoint iep2 = new IPEndPoint(IPAddress.Parse("192.168.1.255"), 9050);  
   string hostname = Dns.GetHostName();  
   byte[] data = Encoding.ASCII.GetBytes(hostname);  
   sock.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.Broadcast, 1);  
   sock.SendTo(data, iep1);  
   sock.SendTo(data, iep2);  
   sock.Close();  
  }  
}  

1 个答案:

答案 0 :(得分:4)

UDP设计只发送一次数据包。它没有握手的概念(与TCP不同),纠错或传输保证。除非您手动请求校验和或类似的内容,否则您甚至无法确定数据是否发送到您发送的位置。

维基百科有一个很好的部分:Reliability and congestion control solutions in UDP

所以,是的,如果你想要可靠性,你需要实现传输保证代码。但是如果收件人说收到数据的消息被延迟了呢?那么,你需要实现某种超时。如果消息丢失怎么办?您需要将数据重新发送给收件人。你怎么知道收件人是否这个时间?等...

如果您不想这样做,那么我建议您查看TCP,它会自动为您管理。