【发布时间】:2015-02-23 22:23:09
【问题描述】:
我是 UDP 和 Java 的 UDP API 的新手,我知道数据包到达时可能已损坏、被 IP 分割或以任何其他方式出错。当然,如果这样的包分流到达,UDP头中的校验和就不对了。
在Java中读取像DatagramSocket.receive(DatagramPacket)这样的UDP数据包时,是否保证接收到的数据包的内容是正确的(意味着计算的校验和是正确的)?还是 Java 也会将损坏的 UDP 数据包传递给应用程序?
【问题讨论】:
-
与Java无关。 操作系统不会将损坏的数据包传递给 JVM。
-
@EJP 所以如果我收到一个数据包,我可以确定它的内容是完整的并且没有损坏?
-
您可以确定它通过了 IPv4 标头校验和、UDP 校验和(如果通过以太网传输,还有以太网校验和)。校验和仍然有一个非零值,但如果发生损坏,报告误报的可能性非常、非常。
标签: java c sockets networking udp