我现在的程序是c/s通信,服务器是c++语言,客户端是java语言,也就是手机接收。发送的数据包规定长度为1400,包括包头(18)和包体(1400-18,未满补0),java接收端应该也按照1400一个一个接收数据流,但是每次
InputStream in = sock.getInputStream();  
int len = in.read(buff);
读出来并不都是1400,所以需要组包。具体怎么组包呢?我的代码如下,这样写好像有问题,求高手指教: int readlen = 0;
int length = 0;
byte[] buffer = new byte[1400];
byte[] buff = new byte[1400];
while(true)

 if( (readlen = in.read(buff))!=-1)
{
System.out.println("--------read buff len="+readlen);
if(readlen<=1400)
{
if(length==0)
{
System.arraycopy(buff, 0, buffer, 0, buff.length);
length+=readlen;
if(length==1400)
{
queue.put(buffer);
                        ansPkt anspkt  = new ansPkt(buffer);  //ansPkt是我定义的数据包类,解析buffer,得到我需要的类似文件ID的东西
short fileID = anspkt.getFileID();
short SBN = anspkt.getSBN();
long filelen = anspkt.getFileLength();
short buffsize = anspkt.getBuffsize();
System.out.println("readlen==1400   receive packet: fileID="+fileID+"  SBN="+SBN+"  filelen="+filelen+"   buffsize="+buffsize);
length = 0;
buffer = new byte[1400];    //清空byte数组
}
}
else
{
if(readlen==1400-length)
{
System.arraycopy(buff, 0, buffer, length, 1400-length);
queue.put(buffer);
                        ansPkt anspkt  = new ansPkt(buffer);
short fileID = anspkt.getFileID();
short SBN = anspkt.getSBN();
long filelen = anspkt.getFileLength();
short buffsize = anspkt.getBuffsize();
System.out.println("readlen !=1400   receive packet: fileID="+fileID+"  SBN="+SBN+"  filelen="+filelen+"   buffsize="+buffsize);
length = 0;
buffer = new byte[1400];
}
else if(readlen >1400-length)
{
System.arraycopy(buff, 0, buffer, length, 1400-length);
queue.put(buffer);
                        ansPkt anspkt  = new ansPkt(buffer);
short fileID = anspkt.getFileID();
short SBN = anspkt.getSBN();
long filelen = anspkt.getFileLength();
short buffsize = anspkt.getBuffsize();
System.out.println("readlen !=1400   receive packet: fileID="+fileID+"  SBN="+SBN+"  filelen="+filelen+"   buffsize="+buffsize);
length = readlen-(1400-length);
buffer = new byte[1400];
System.arraycopy(buff, 1400-length, buffer, 0, length);
}
}         }
        }