c#udp检查消息是否到达

时间:2018-09-03 03:19:17

标签: c# udp udpclient

您如何检查消息是否已到达目的地,我想出了我的解决方案,但由于我不是该主题的专家,所以我想了解其他方法。 我的解决方案是(客户端)发送数据包,如果在超时时间内未收到确认,则再次发送;(服务器端)如果收到的消息正确,则发送确认;如果在另一端没有收到,则再次发送。 这是此算法的示意图, Picture。 简而言之,双方发送了两次消息。 还有其他想法吗?

1 个答案:

答案 0 :(得分:2)

这取决于您的应用程序。但是从所附的图表来看,您更喜欢TCP通信。

但是,如果您真的想使用UDP而不是TCP,则必须放开ACK。

假设您正在不断将图像流传输到远程目标。只要流式传输速度尽可能快,您就不必担心帧丢失。您可以使用UDP。还要考虑传输线(物理层)预测结果的可靠性。

但是,如果您的应用程序不是时间紧迫的,但需要尽可能高的可靠性,则可以使用TCP。

有关更多细节,请访问此

下面是与UDP和TCP的一些比较

UDP协议是一种非常简单的协议,它允许通过IP发送数据报。对于时间紧迫的数据,UDP比TCP更可取,因为TCP的许多可靠性功能往往会因数据包丢失而无条件重新发送数据而导致更高的等待时间和延迟而付出代价。 >

与TCP相比,TCP为程序员提供了每个连接对等方一个有序的八位位组流,而UDP提供了基于数据包的接口,没有连接对等方的概念。到达包含源地址1的数据报,并且程序员应该手动跟踪概念上的对等“连接”。

TCP保证2,既可以将给定的八位位组传递给所连接的对等端,也可以断开连接并通知程序员。 UDP不保证将传递任何给定的数据包,如果丢失数据包,则不会提供任何通知。

TCP保证发送的每个八位位组都将按照其发送顺序被接收。 UDP不保证传输的数据包将以任何特定的顺序被接收,尽管诸如IP之类的基础协议暗示着数据包通常将在没有路由和/或硬件错误的情况下以传输的顺序被接收。

TCP对传输数据的大小没有限制。 UDP直接使程序员面临几个特定于实现的(但也是标准化的)数据包大小限制。创建大小超过这些限制的数据包会增加将数据包分段或简单丢弃的机会。分段是不可取的,因为如果丢失了数据报的任何单个分段,则整个数据报将被自动丢弃。由于各种重叠的标准,为数据报确定安全的最大大小并非易事。