java - Java 的 UDP API 是否只接收校验和正确的数据包?

标签 java c sockets networking udp

我是 UDP 和 Java 的 UDP API 的新手,我知道数据包到达时可能会损坏、被 IP 拆分或以任何其他方式出错。当然,如果这样的数据包被拆分到达,则 UDP header 中的校验和将不正确。

当像 DatagramSocket.receive(DatagramPacket) 这样用 Java 读取 UDP 数据包时,是否可以保证接收到的数据包的内容是正确的(意味着计算的校验和是正确的)?或者 Java 是否也会将损坏的 UDP 数据包传递给应用程序?

最佳答案

简答:

是的,除非另外配置。

长答案:

Udp数据包包括CHECKSUM您的操作系统使用的是为您验证数据包。当收到校验和错误的数据包时,操作系统堆栈会丢弃该数据包(在到达应用层之前)。

我从未尝试过,但在 Ubuntu 中可以使用

禁用校验和
ethtool --offload eth0 rx off

关于java - Java 的 UDP API 是否只接收校验和正确的数据包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27659957/

相关文章:

java - 如何使用 Java 解析 JSON 二维数组

java - 如何在没有java的情况下运行SQL命令?

Java JFileChooser 无法检测外语

c - 如何将多个参数传递给 c 中客户端服务器的线程?

java - 使用相同端口的 tcp 中继服务器

c - 如何以编程方式远程登录并通过TCP套接字发出命令?

java - 在 Storm 拓扑中出现 NotSerializedException 错误

c - "else"在 C 中如何在 "1 line if"中工作?

c - 日期类型/scanf()

c - 传输端点未连接