如何将从另一个ip地址发送的UDP数据写入文本文件而不丢失任何数据

本文关键字:数据 文本 文件 任何 UDP 另一个 ip 地址 | 更新日期: 2023-09-27 18:12:01

实际在控制台。writeline我从UDPserver这是从另一个ipaddress发送的所有数据。当写入传输的数据到我的文本文件有些数据丢失它不写所以如何写入数据到我的文本文件而不丢失

bool done = false;
private const int listenPort = 9050;
string strDestinationfileName = AppDomain.CurrentDomain.BaseDirectory + "Sample.txt";
UdpClient listener = new UdpClient(listenPort);
IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, listenPort);
FileStream fout = new FileStream(strDestinationfileName,   
                                 FileMode.OpenOrCreate,
                                 FileAccess.Write, FileShare.ReadWrite);
try
{
    while (!done)
    {
        Console.WriteLine("Waiting for broadcast");
        byte[] bytes = listener.Receive(ref groupEP);
        fout.Write(bytes, 0, bytes.Length);
        System.Threading.Thread.Sleep(100);
        Console.WriteLine("Received broadcast from {0} :'n {1}'n",
            groupEP.ToString(),
            Encoding.ASCII.GetString(bytes, 0, bytes.Length));
    }
}

如何将从另一个ip地址发送的UDP数据写入文本文件而不丢失任何数据

UDP是一种基于数据包的不可靠协议。对于你想做的事来说,这是最糟糕的选择。

UDP数据包可能按顺序到达,但它们也可能根本没有到达,或者是无序到达。如果它们太大,它们也可能被无声地丢弃。

使用TCP:它是一个基于流的协议,字节按照发送的顺序到达,并且会可靠地到达。你可以使用。net内置的Socket或TCP类来实现。

(如果你确实需要使用UDP,你需要发明你自己的数据包编码方案和重试协议,以确保数据包到达,并以正确的顺序到达。对于初学者来说,这是一项非常复杂的任务,这基本上就是TCP为您所做的。就用TCP吧!)

编辑:对于xixonia,因为显然指出一个关键缺陷是不值得的:您从未将done设置为true,因此您的循环永远不会退出,并且您的数据的最后部分永远不会刷新到磁盘。