繁体   English   中英

c#udp检查消息是否到达

[英]c# udp check if message reached

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

这取决于您的应用程序。 但是,从附带的图表来看,您更喜欢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直接使程序员面临几个特定于实现的(但也是标准化的)数据包大小限制。 创建大小超过这些限制的数据包会增加将数据包分段或简单丢弃的机会。 分段是不可取的,因为如果丢失了数据报的任何单个分段,则整个数据报将被自动丢弃。 由于各种重叠的标准,为数据报制定安全的最大大小并非易事。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM