本帖最后由 sqz10200 于 2011-03-18 13:40:17 编辑

解决方案 »

  1.   

    LZ这么凄惨···
    虽然不懂java,但是我写过类似的程序,
    既然不能接受完说明缓冲区不够大呗
      

  2.   

    不懂java,所以没看程序,说的不对请见谅
    LZ可以先接收这个 “第1位☞第4位,用4个byte表示此信息的长度...”
    然后根据的信息来分配合适空间,C用malloc,不知道java用什么,这样就可以了,最后记得释放
      

  3.   

    还有也不说是TCP还是UDP.哎,你自己玩把,下班了.
      

  4.   


    zh这代码肯定是TCP啊
    一会加上注释代码不难所以就没加
      

  5.   


    public void run() {
            DataOutputStream dos=null;
            DataInputStream dis=null;
            try {
                dos = getDataOutput(socket);
                dis = getDataInput(socket);
            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            while(true){
            try {
                            String msg = null;            msg = this.getData;
    //获取命令的长度.
                dataLen = intToByte(msg.length());
                System.out.println(bytesToInt(dataLen));
                System.out.println("dataLen="+msg.length());
    //发送开始表示01
                dos.write(start);
    //发送命令长度
                dos.write(dataLen);
    //发送正文
                dos.write(msg.getBytes());
    //发送结束字符00
                dos.write(end);            System.out.println(msg);            byte[] bb = new byte[5];
    //读取5个字节,就是01和正文长度...
                dis.read(bb);
                byte[] bf = new byte[] { bb[1], bb[2], bb[3], bb[4] };
    //打印看那看那
                for(byte b :bf){
                    System.out.println(b);
                }
    //转换成int
                System.out.println(bytesToInt(bf));
    //缓冲区大小.
                int buJin = 1024;
                int len = bytesToInt(bf);
                String re = "";
    //建立缓冲区.
                 byte[] by = new byte[buJin];
                 int count= len/buJin;
    //循环读取
                 for(int i = 0 ;i<count;i++){
                     dis.read(by);
                     System.out.println(new String(by));
                     re+=new String(by);
                 }
    //读进最后的剩下的部分.
                 if(len%1024!=0){
                     System.out.println("进入与"+len%buJin);
                     byte[] foo = new byte[len%buJin];
                     dis.read(foo,0,foo.length);
                     System.out.println(new String(foo));
                     re+=new String(foo);
                 }
                 System.out.println("asdf"+re.length());
    //看看是否是正常数据.
    //是的话进行解析发送回来的是XML
                 if(!(dataNone.equals(re))){
                     
                     List<Traffic> tList = xmlStrToDB(re);
                     System.out.println("tList");
                 }else{
                     System.out.println("else");
                 }
            } catch (Exception e) {
                e.printStackTrace();
            }finally{
    //            try {
    //                socket.close();
    //            } catch (IOException e) {
    //                // TODO Auto-generated catch block
    //                e.printStackTrace();
    //            }
            }
            try {
                Thread.sleep(17000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        }加上注释的.