UDP报文头
imageUDP的报文头结构比较简单。
- 源端口:16位,标识本地端口
- 目的端口:16位,标识目标端口
- 总长度:标识该报文段包括报头部分的所有数据字节的长度。
- 校验和:计算方式和TCP相似
- 数据:可变长度
UDP校验和
UDP中的校验和是不必要的,即使数据段校验和不通过也没办法通知对端发送数据。但效率比TCP高。
UDP头部报文代码解析
public class UDPacket {
public static final int SOURCE_PORT_BIT = 0;
public static final int DESTINATION_PORT_BIT = 2;
public static final int TOLAL_LENGTH_BIT = 4;
public static final int CHECK_SUM_BIT = 6;
public byte[] m_Data;
public int m_Offset;
public UDPacket(byte[] data,int offset){
this.m_Data = data;
this.m_Offset = offset;
}
public int getSourcePort(){
return Packet.readShort(m_Data,m_Offset + SOURCE_PORT_BIT);
}
public int getDestinationPort(){
return Packet.readShort(m_Data,m_Offset + DESTINATION_PORT_BIT);
}
public int getTotalLength(){
return Packet.readShort(m_Data,m_Offset + TOLAL_LENGTH_BIT);
}
public int getCheckSum(){
return Packet.readShort(m_Data,m_Offset + CHECK_SUM_BIT);
}
public void setSourcePort(int port){
Packet.writeShort(m_Data,m_Offset + SOURCE_PORT_BIT,(short) port);
}
public void setDestinationPort(int port){
Packet.writeShort(m_Data,m_Offset + DESTINATION_PORT_BIT,(short) port);
}
}
UDP相较于之前的IP头、TCP头的代码解析就相对简单了许多,在会这些之前会位运算是很重要的。加油啊!!!
网友评论