使用 C#,通过 UDP 的广播是重复发送它的数据包,还是只发送一次?
我以前从未使用过这项技术,我想通过 LAN 临时广播少量信息(一小行字符串)。如果接收端没有准备好,广播会自动重复还是一次性?我使用的代码来自 here .所以我想在一台机器上启动广播器,几分钟后启动接收器并检索广播器发送的内容。
这是代码
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();
}
}
最佳答案
UDP 在设计上只发送一次数据包。它没有握手(与 TCP 不同)、纠错或传输保证的概念。除非您手动请求校验和或类似的东西,否则您甚至不能确定您的数据到达了您发送它的地方。
维基百科对此有一个很好的部分:Reliability and congestion control solutions in UDP .
所以,是的,如果您想要可靠性,您将需要实现传输保证代码。但是,如果来自接收方的消息说数据已收到被延迟怎么办?好吧,那么你需要实现某种超时。如果消息丢失了怎么办?您需要将数据重新发送给收件人。您如何知道收件人这次是否收到了?等等……
如果您不想这样做,那么我建议您研究自动为您管理的 TCP。
关于c# - 通过 UDP 的广播是重复发送它的数据包,还是只发送一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9589906/