如何使用UdpClient类接收多个数据包?

How to receive multiple packets using UdpClient class?

提问人:Gabriele Troviso 提问时间:9/25/2023 更新时间:9/25/2023 访问量:28

问:

首先,对不起我的英语不好。我在 C# 中使用 UdpClient 制作了一个简单的客户端/服务器程序。我有一个问题。为了发送一个大文件(例如pdf),我在客户端使用以下代码:

    private void WorkOnBuffer(byte[] buffer)
    {
        int cnt = buffer.Length/buffMax; //buffMax = 64000
        byte[] subBuffer = new byte[buffMax];
        int min = 0;

        for (int i = 0; i < cnt; i++)
        {
            Array.Copy(buffer, min, subBuffer, 0, buffMax);
            client.Send(subBuffer, subBuffer.Length);
            min += buffMax;
        }
    }

有一个循环发送字节子数组,由主字节数组组成(例如,来自pdf或txt)。在服务器端,如何读取所有这些数据包?使用方法:

client.Receive(ref endPoint) // entPoint instance of IPEndPoint

我只读取一个数组字节。我错了什么?

C# UDP 客户端-服务器 UDPCondin

评论

1赞 Fildor 9/25/2023
坦率地说,UDP 是发送大量顺序数据的一个奇怪选择。您选择它而不是 TCP 有什么具体原因吗?
1赞 Fildor 9/25/2023
请注意,使用 UDP 并因此以块形式发送数据,您需要手动考虑丢失的数据包、无序的数据包等。因此,您不仅需要能够重建数据块本身,还需要能够重建其在整个数据集中的位置。并可能请求重新发送特定数据包。这些都是使用 TCP 考虑的。
1赞 JonasH 9/25/2023
如果你的目标是一个“简单的客户端服务器程序”,我真的建议使用更高级别的协议,我发现MQTT相当容易使用,但还有很多其他的,比如无处不在的Http。 使用 TCP 或 UDP 都需要您处理一堆低级细节,这会使实现变得非常复杂。
0赞 Gabriele Troviso 9/25/2023
我知道TCP,不幸的是我需要在工作中使用UDP。出于这些原因,需要了解 UDP 的工作原理以及客户端/服务器系统如何使用 UDP。
0赞 Fildor 9/25/2023
嗯,对于这种格式来说,这有点太宽泛了。它真的有很多东西(而且你可能做错很多)。我们可以把它归结为你现在面临的具体问题,这似乎是你没有得到你所期望的,对吧?你能发布一些关于接收代码的更多上下文吗?

答: 暂无答案