各位大侠:我从server端接收二进制的流文件,然后写到文件中去。确认网络和数据没有问题,本来是512个字节,可怎么一直接收的长度不对,有时503、504、510等。请教具体的接收算法和写文件的方法,解决立即给分,在线等待。

解决方案 »

  1.   

    tcp/ip栈的问题,建议你先写一个临时文件,或者读取固定的字节数(可以考虑循环读)
      

  2.   

    Squall1009(钰枫),您能给个具体的代码吗?感谢
      

  3.   

    你假如确定你每次要读512个字节的话,你先写一个临时文件,然后去读临时文件。这个是解决这个问题最简单的方法。因为从socket中读东西有可能读不满你需要的字符数就返回了。
      

  4.   

    假如说你的目的就是传文件的话,你判断文件结束的标志不是read的返回值是512,而应该是read的返回值是0或者-1(你可以自己试一下)
      

  5.   

    楼主说的“503、504、510等”长度是不是指生成的文件的长度?如果是的话,那请你注意了,很可能是二进制流中出现的 0D 0A 在文件中被写成了 0A。如果你的接收端程序是在 Linux 上的话,可能性就更大了……
      

  6.   

    你是不是建了一个byte数组,然后读入再发送的吧??
    我以前也是这样,不过不影响文件运行,
    你可以一个个字节的读,
    用BufferedInputStream read();
    例如:
            int data;
       while((data=bin.read()) != -1)
          {
            // Socket发送
           }
        // DataOutputStream包装Socket 
               发送一个文件结束标志,
                int endFile = -1;
               例如: writeInt(endFile);
              另一端利用DataInputStream包装Socket来接收
             int endFile = readInt();大概思路就这样,参考下