我可以使用 UdpClient.Send(byte array) 或 UdpClient.Client.Send(stream) 方法在整个 udp 协议中发送数据。两种方法都有效。唯一的区别是,在一种方法中我传递一个字节数组,而在另一种方法中我传递一个流。
快速示例:
UdpClient udpClient = new UdpClient(localEndPoint);
// I can eather send data as:
udpClient.Send(new byte[] { 0, 1, 2 }, 3);
udpClient.Client.Send(new byte[5]);
还有哪种方法可以确保我的数据到达目的地而不会丢失信息?我已经读过 udp 协议不能确保所有字节都到达它的目的地,因此更适合流式传输视频、音频,但不适用于像我正在做的那样传输文件。我使用 udp 而不是 tcp 的原因是因为在恰好位于路由器后面的两个用户之间建立 tcp 连接非常复杂。我知道如果其中一位用户在他的路由器上启用端口转发是可能的。我设法通过所谓的 udp 打孔来发送数据。udp 打孔使您能够在服务器的帮助下在路由器后面的两个用户之间建立连接。在这里解释它是如何工作的将会很长,如果你用谷歌搜索它,你可以找到很多信息。不管怎样,我只是想让你知道我为什么使用 udp 而不是 tcp。我现在不知道是否可以使用此协议发送文件以确保没有数据丢失。也许我必须创建一个算法。或者 UdpClient.Client.Send 方法可能确保接收到数据,而 UdpClient.Send 方法不确保接收到数据。