KLALB UDP TEST

This commit is contained in:
Administrator
2024-01-30 16:54:09 +08:00
parent 722ab9710f
commit b4fccf3a03
67 changed files with 1977 additions and 929 deletions
@@ -2,19 +2,29 @@ package org.kne.cloud.network.klalb;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.StreamCorruptedException;
import java.util.Objects;
import java.util.zip.CRC32;
public class DATATPacket extends KLALBPacket {
public static final ByteArrayRecycle arrayRecycle=new ByteArrayRecycle(100,65535);
import javax.sound.sampled.Port;
public class DATATPacket extends KLALBPacket implements Comparable<DATATPacket>,PortPacket{
public static final ByteArrayRecycle arrayRecycle=new ByteArrayRecycle(5000,65535);
@Override
public long getLength() {
return super.getLength()+18+size;
return super.getLength()+19+size;
}
private int sport,dport;
private long number;
private int size;
private byte[]data;
private int sendcount;
volatile long resendtimer=System.nanoTime();
public DATATPacket(int sport,int dport,long number,byte[]data,int size) {
super(DATAT);
this.sport=sport;
@@ -24,6 +34,10 @@ public class DATATPacket extends KLALBPacket {
this.size=size;
}
public int getSendcount() {
return sendcount;
}
public DATATPacket() {
super(DATAT);
}
@@ -48,28 +62,107 @@ public class DATATPacket extends KLALBPacket {
public String toString() {
return "DATAT "+sport+"->"+dport+" "+number+"["+size+"]";
}
private final byte[] writeBuffer = new byte[19];
@Override
protected void writeToStream(DataOutput dto) throws IOException {
super.writeToStream(dto);
dto.writeInt(sport);
/*dto.writeInt(sport);
dto.writeInt(dport);
dto.writeLong(number);
dto.writeChar(size);
dto.writeByte(getSendRecord().size());
dto.writeChar(size);*/
writeBuffer[0] = (byte)(sport >>> 24);
writeBuffer[1] = (byte)(sport >>> 16);
writeBuffer[2] = (byte)(sport >>> 8);
writeBuffer[3] = (byte)(sport >>> 0);
writeBuffer[4] = (byte)(dport >>> 24);
writeBuffer[5] = (byte)(dport >>> 16);
writeBuffer[6] = (byte)(dport >>> 8);
writeBuffer[7] = (byte)(dport >>> 0);
writeBuffer[8] = (byte)(number >>> 56);
writeBuffer[9] = (byte)(number >>> 48);
writeBuffer[10] = (byte)(number >>> 40);
writeBuffer[11] = (byte)(number >>> 32);
writeBuffer[12] = (byte)(number >>> 24);
writeBuffer[13] = (byte)(number >>> 16);
writeBuffer[14] = (byte)(number >>> 8);
writeBuffer[15] = (byte)(number >>> 0);
writeBuffer[16]=(byte) getSendRecord().size();
writeBuffer[17]=(byte) (size>>>8);
writeBuffer[18]=(byte) (size>>>0);
dto.write(writeBuffer);
//CRC32 crc=new CRC32();
// crc.update(data, 0, size);
dto.write(data,0,size);
//dto.writeLong(crc.getValue());
}
private final byte[] readBuffer = new byte[19];
@Override
protected void readFromStream(DataInput din) throws IOException {
super.readFromStream(din);
sport=din.readInt();
/*sport=din.readInt();
dport=din.readInt();
number=din.readLong();
size=din.readChar();
sendcount=din.readUnsignedByte();
size=din.readChar();*/
din.readFully(readBuffer);
sport=((readBuffer[0] << 24) + (readBuffer[1] << 16) + (readBuffer[2] << 8) + (readBuffer[3] << 0));
dport=((readBuffer[4] << 24) + (readBuffer[5] << 16) + (readBuffer[6] << 8) + (readBuffer[7] << 0));
number=(((long)readBuffer[8] << 56) +
((long)(readBuffer[9] & 255) << 48) +
((long)(readBuffer[10] & 255) << 40) +
((long)(readBuffer[11] & 255) << 32) +
((long)(readBuffer[12] & 255) << 24) +
((readBuffer[13] & 255) << 16) +
((readBuffer[14] & 255) << 8) +
((readBuffer[15] & 255) << 0));
sendcount=readBuffer[16]&0xff;
size=(((readBuffer[17]&0xff) << 8) + ((readBuffer[18]&0xff) << 0));
data=arrayRecycle.create();
din.readFully(data,0,size);
/*CRC32 crc32=new CRC32();
crc32.update(data, 0, size);
if(din.readLong()!=crc32.getValue()) {
throw new StreamCorruptedException("CRC32 error!");
}*/
}
@Override
public int hashCode() {
return Objects.hash(number);
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
DATATPacket other = (DATATPacket) obj;
return number == other.number;
}
public int getSize() {
return size;
}
@Override
public int compareTo(DATATPacket o) {
if(number>o.number) {
return 1;
}else if(number<o.number){
return -1;
}else {
return 0;
}
}
}