主要技术问题:windows,linux等系统采用LITTLE_ENDIAN字节序,而java自身采用BIG_ENGIAN字节序,BIG_ENGIAN是指低地址存放最高有效字节(MSB),而LITTLE_ENDIAN则是低地址存放最低有效字节。Java程序写的客户程序端同c++的服务端程序交互时结构体的某些数据类型需要转换字节序。本文解决方法,java客户端程序发送数据时做相应的转换字节序,等收到数据时再做一次字节序的转换。
现在的网络程序多数采用可靠交付的TCP协议,其采用字节流的传输方式,c++程序中用结构体来模拟报头以此界定每次发送的报文。所以网络中整个字节流的格式:报头+数据负载+报头+数据负载……
本文基于c++写服务端和java写客户端应用场景描述。服务端程序收到客户端发送的报文后将原报文做一个回射。
采用报头:
Struct Header{
Intcmd; //标示报文用途
Intlength; //数据负载长度
Intpara1; //服务端处理完结果
Int para2; //服务端处理完结果
Int para3; //服务端处理完结果
}; 此时套接口的读写方式为先读报头,在报头中取出数据负载的长度,然后再读相应字节的数据。
Java客户端代码:
报头类:
publicclassMsgHeader {
privateintcmd;
privateintlength;
privateintpara1;
privateintpara2;
publicint getCmd() {
returncmd;
}
publicvoid setCmd(int cmd) {
this.cmd = cmd;
}
publicint getLength() {
returnlength;
}
publicvoid setLength(int length) {
this.length = length;
}
publicint getPara1() {
returnpara1;
}
publicvoid setPara1(int para1) {
this.para1 = para1;
}
publicint getPara2() {
returnpara2;
}
publicvoid setPara2(int para2) {
this.para2 = para2;
}
publicint getPara3() {
returnpara3;
}
public