0
我在用java發送數據報包時遇到了一些問題。我有我的部分代碼在下面。用bytebuffer發送Java包
發信人:
String str = "abcdefghijk.txt"
byte[] data = new byte[1000];
ByteBuffer buf = ByteBuffer.wrap(data);
buf.put(str.getBytes());
//data = str.getBytes(); line 1
//checksum
crc.reset();
crc.update(data, 8, data.length-8);
checksum = crc.getValue();
buf.rewind();
buf.putLong(checksum);
packet = new DatagramPacket(data, data.length, address);
接收機:
packet.setLength(data.length);
socket.receive(packet);
data = packet.getData();
str = new String(data);
str = str.trim();
buf.rewind();
checksum = buf.getLong();
crc.reset();
crc.update(data, 8, packet.getLength()-8);
我會然後通過使用校驗和做一次檢查== crc.getValue()。如果我按照原樣運行代碼,我的校驗和是有效的,但是接收到的str會像這樣 - > @#$%ijk.txt(垃圾值infront)。在這種情況下,前8個字符不見了,我認爲這與getLong()有關。
但是,如果我在我的代碼中使用第1行,接收到的字符串是正確的(abcdefghijk.txt),但校驗和將是錯誤的。
請注意,代碼不是整個事物,而只是影響輸出的部分。任何幫助將不勝感激。