好吧,所以我正在为我的网络课程进行编程,并且必须使用UDP实现一个使用Java的Java项目。我们正在实现一个HTTP服务器和客户端以及一个'gremlin'函数,该函数以指定的概率破坏数据包。 HTTP服务器必须在应用层将大文件分成多个段,并通过UDP发送到客户端。客户端必须在应用层重组收到的段。但是我想知道的是,如果UDP在定义上不可靠,为什么我不得不在这里模拟不可靠性?丢失UDP数据包的机会是多少?
我的第一个想法是,也许这只是因为我的老师认为在我们的情况下,客户端和服务器都将在同一台机器上运行,并且文件将从一个进程转移到另一个100%通过UDP,因为它位于同一台计算机上的两个进程之间。
这让我不禁要问,如果服务器和客户端是同一台机器上的两个进程,并且不需要出去,UDP是否会丢失数据包,是否会损坏数据包或将数据包乱序发送实际的网络。
我也想知道实际上丢失数据包的机会是什么,如果数据包损坏,或者让它们在现实中乱序发生,通常会通过互联网在两个地理上遥远的主机之间。
非常感谢任何能够帮助我解决这些问题的人。
猜测你从来没有遇到过糟糕的互联网连接; p UDP主要用于场景中接收者不可能响应的场景。通过卫星,无线电波传输数据的示例 – leppie 2013-02-25 04:45:14
而不是“接收机无法响应的地方”我会说它用于丢失数据包并不重要的场景,比如音频/视频流媒体,视频会议等 – Trap 2016-07-04 13:24:19
从这里的经验讲,我有一个项目,其中两个程序通过UDP进行通信,并不时发生丢包,我无法想象为什么,他们运行在同一台计算机上并通过回环接口。所以是的,你必须实现你的gremlin函数是一件好事,因为尽管可靠性很高(我没有任何统计信息,但是我在回环上高于99.9%甚至更高),数据包丢失仍然会发生。 – soger 2016-12-31 14:52:30