簡體   English   中英

C#。 UDP單播

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM