C#。 UDP单播

时间:2014-10-17 21:18:18

标签: c# udp udpclient

我尝试从UDP单播客户端接收六条消息。接收器看起来像:

UdpClient udpclient = new UdpClient();
IPEndPoint localEp = new IPEndPoint(IPAddress.Parse(ClientIP), ClientPort);
udpclient.Client.Bind(localEp);
udpclient.Client.ReceiveTimeout = 10000;
bool isTimeExpired = false;
while (!isTimeExpired)
{
    byte[] buffer;
    try
    {
        buffer = udpclient.Receive(ref localEp);

    }
    catch (SocketException)
    {
        isTimeExpired = true;
        continue;
    }
    // Deserialize
    // ...
}
udpclient.Close();

程序有效,但有时我不会收到6封邮件(2或3)。发件人申请:

UdpClient client = new UdpClient();

IPEndPoint remoteep = new IPEndPoint(IPAddress.Parse(ClientIP), ClientPort);

// Serialize
// ...

stream.Position = 0;
byte[] data = new Byte[stream.Length];
stream.Read(data, 0, Convert.ToInt32(stream.Length));
client.Send(data, data.Length, remoteep);
stream.Close();
client.Close();

我在同一台机器上运行了6个发送方应用程序实例(以及一个接收方实例)。我需要始终接收来自每个发件人的邮件(总共六封邮件)。我的错误在哪里?

非常感谢!

1 个答案:

答案 0 :(得分:2)

它是UDP。我们无法保证您收到已发送的任何数据报。根据设计,UDP是不可靠的。 "用户"在UDP中也可能代表"不可靠"代替。 :)

仅供参考:我们也不保证您只会收到已发送的任何给定数据报的一份副本。也无法保证数据报的发送顺序与它们的发送顺序相同。

如果你需要那种可靠性,那么你需要TCP,而不是UDP(或者你需要做一些额外的工作来重新发明TCP轮)。