UDP数据报Socket + java中的校验和

时间:2011-02-11 14:32:18

标签: java

据我了解,UDP协议没有定义数据损坏时要采取的操作,即校验和失败。那就是我们的应用程序可以使数据包重新传输或让数据包被声明丢失....

在java中实现Datagram套接字时,我想确定发送的某些数据包的校验和是否正确....

java中有没有办法这样做......

基本上我希望我知道这个数据包在传输时已经被破坏,因此必须重新传输....

非常感谢

2 个答案:

答案 0 :(得分:3)

我会查看以下两个课程:CheckedInputStreamChecksum。校验和应该由发送数据包的机器执行,接收数据包的机器也应该执行校验和,然后比较值。至少那是我看到它的完成方式..

注意:校验和必须包含在发送的数据包中。此外,由于您正在检查数据是否已损坏,ByteArrayInputStream可能也证明是有用的。这是一个example

答案 1 :(得分:0)

首先,您必须将校验和添加到udp消息中。我假设校验和已放在消息的其余部分的前面,我假设calcCheckSum可以计算校验和。

import java.net.*;

DatagramSocket socket = new DatagramSocket();
byte[] buffer = new byte[256]; // some appropriate size
DatagramPacket packet = new DatagramPacket(buf, buf.length);

socket.receive(packet);
String checksum = new String(packet.getData(),0, <some length>);
boolean ok = calcCheckSum(checksum);