我尝试从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个发送方应用程序实例(以及一个接收方实例)。我需要始终接收来自每个发件人的邮件(总共六封邮件)。我的错误在哪里?
非常感谢!
答案 0 :(得分:2)
它是UDP。我们无法保证您收到已发送的任何数据报。根据设计,UDP是不可靠的。 "用户"在UDP中也可能代表"不可靠"代替。 :)
仅供参考:我们也不保证您只会收到已发送的任何给定数据报的一份副本。也无法保证数据报的发送顺序与它们的发送顺序相同。
如果你需要那种可靠性,那么你需要TCP,而不是UDP(或者你需要做一些额外的工作来重新发明TCP轮)。