[英]C#. UDP unicast
我嘗試從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個發送方應用程序實例(和一個接收方實例)。 我需要一直接收來自每個發件人的消息(總共6條消息)。 我的錯誤在哪里?
非常感謝你!
是UDP。 不能保證您會收到發送的任何數據報。 UDP是設計不可靠的。 UDP中的“用戶”也可能代表“不可靠”。 :)
僅供參考:我們也無法保證您只會收到已發送的任何給定數據報的一個副本。 也不能保證數據報將按發送時的相同順序到達。
如果需要那種可靠性,那么就需要TCP,而不是UDP(或者您需要做很多額外的工作來重新發明TCP輪子)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.