使用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();
}
}
答案 0 :(得分:4)
UDP设计只发送一次数据包。它没有握手的概念(与TCP不同),纠错或传输保证。除非您手动请求校验和或类似的内容,否则您甚至无法确定数据是否发送到您发送的位置。
维基百科有一个很好的部分:Reliability and congestion control solutions in UDP。
所以,是的,如果你想要可靠性,你需要实现传输保证代码。但是如果收件人说收到数据的消息被延迟了呢?那么,你需要实现某种超时。如果消息丢失怎么办?您需要将数据重新发送给收件人。你怎么知道收件人是否这个时间?等...
如果您不想这样做,那么我建议您查看TCP,它会自动为您管理。