C++服务器与java进行socket通信案例(六)

2014-11-24 09:44:19 · 作者: · 浏览: 15
final int LparamLen=2048;
private static final int CommandLen=2052;
public byte []byteArrayData=new byte[CommandLen];
private int ID;
private String lparam;
private NetDataTypeTransform mDataTypeTransform=new NetDataTypeTransform();;
public byte[] getByteArrayData(){
return byteArrayData;
}
public NetDataCommand(){

}
public NetDataCommand(int ID,String lparam) {
// TODO Auto-generated constructor stub

this.ID=ID;
this.lparam=lparam;
byte[] IDbyte = mDataTypeTransform.IntToByteArray(ID);
System.arraycopy(IDbyte,0, byteArrayData, 0, IDbyte.length);
byte[] Strbyte = mDataTypeTransform.StringToByteArray(lparam);
System.arraycopy(Strbyte,0,byteArrayData,IDbyte.length,Strbyte.length);
}
public NetDataCommand(byte[] dataArray){
int id=1;
String lpString="";
System.arraycopy(dataArray,0, byteArrayData,0,CommandLen);
byte[] forIntID = new byte[IDLen];
System.arraycopy(dataArray,0,forIntID,0,forIntID.length);
id=mDataTypeTransform.ByteArrayToInt(forIntID);
byte[] StrTemp=new byte[LparamLen];
System.arraycopy(dataArray,IDLen,StrTemp,0,StrTemp.length);
lpString=mDataTypeTransform.ByteArraytoString(StrTemp, StrTemp.length);
//lpString=StrTemp.toString();
ID=id;
lparam=lpString;
}
public int getID(){
return ID;
}
public String getLparam(){
return lparam;
}
public void setID(int id) {
this.ID=id;
}
public void setLparam(String str){
this.lparam=str;
}

}


4.ThreadRead.java//线程,用于一直接收数据。
[java]
/*
*@author: ZhengHaibo
*web: blog.csdn.net/nuptboyzhb
*mail: zhb931706659@126.com
*2012-9-26 Nanjing njupt
*/
import java.io.IOException;
import java.lang.Thread;
import java.net.Socket;
public class ThreadRead extends Thread{
public Socket mSocket;
public Client mClient;
private static final int GetDriver=0x01;
private static final int GetDirInfo=0x02;
private static final int ExecFile=0x03;
private static final int GetFile=0x04;
private static final int PutFile=0x05;
private static final int DelFile=0x06;
private static final int DelDir =0x07;
private static final int CreateDir=0x08;
private static final int FileInfo=0x09;
private static final int GetScreen=0x10;
private static final int CommandLen=2052;
private static int TryTimes=5;
private byte []byteArrayData=new byte[CommandLen];
public ThreadRead(Socket lpSocket,Client mClient) {
// TODO Auto-generated constructor stub
this.mSocket=lpSocket;
this.mClient=mClient;
}

public void run() {
while (TryTimes>0) {
while (true) {
try {
mSocket.getInputStream().read(byteArrayData);
NetDataCommand mCommand = new NetDataCommand(byteArrayData);
switch (mCommand.getID()){
case GetDriver:
mClient.GetDriverPro(mSocket, mCommand);
break;
case GetDirInfo: