md5是什么?没用过
各位还是先看看我的代码有没有问题,是不是缺少什么东西。我是大肆的学生,我才开始用socket编程,还请各位多帮帮俺

解决方案 »

  1.   

    對Java的網絡編程不是很了解。。
      

  2.   

    老大,你全部是内存?不会吧,这样你的java肯定死机啦!
    你可以每读100k,就写到文件中去!
      

  3.   

    zdhsoft(冬瓜猫):该怎么分包一点一点写进文件呢,给个小例子吧
    感激中.......
      

  4.   

    int batchSize = 100;//100k
    byte[] data;
    while(true){
        data = read batchsize file;
        if(read size == batchsize){
            socket send data.
        }else if(read size > 0){
            socket send data.
            break;
        }else{
            break;
        }
    }
      

  5.   

    getFile 中
    while(( num= fromClient.read(b,0,fromClient.available())) > 0){
       out.write(b,0,num);
       out.flush();
    }
    改成
    byte[] buffer = new byte[batchSize];
    while(( num= fromClient.read(buffer,0,batchSize)) > 0){
       out.write(buffer,0,num);
       out.flush();
    }
      

  6.   

    To:abinleo(风中散发)是多线程的。
    zdhsoft(冬瓜猫)说得每次发小点的包就是把缓冲区改小一些吧。
    to:jacklondon(jacklondon),我按你说的改了,我试了,还是老样子,不过效果比以前好点。我觉得主要是客户端没有发一个数据结束传送结束的标志,服务器端会因为网络问题,有时误以为客户端已传完文件,就关了资源,造成文件不完整。
    我曾试过在客户端发完后用PrintWriter发一个字符串作标志,服务器端接收到这个字符串在关闭,我在服务器端使用BufferedReader来读这个标志字符串,但是老是读不了,是不是BufferedReader连传输文件的流也读了,造成无法接收这个字符串??
    我觉得解决这一点是个关键,你们帮我看看
      

  7.   

    有cache的InputStream/OutputStream,在同一个连接上不能重复创建,尤其是BufferedReader,它每次要读取比你需要的更多的数据。你可能只是用一次readLine,
    但它可能已经把多行的数据都cache了。因此你只能继续使用同一个BufferedReader才
    可以得到正确的数据。
      

  8.   

    我的BufferedReader用的是同一个,我这样改的
    while( ( num= fromClient.read(b,0,100))!=-1 ){
      if(num>0){
        out.write(b,0,num);
        out.flush();
        if((br.readLine()).equals("end"))//这一句把服务器端程序搞死了。
        break;
      }
    }
      

  9.   

    (br.readLine()).equals("end")这句肯定是错的,不知道该怎么写了
      

  10.   

    这是什么东西
    fromClient=new BufferedInputStream(netClient.getInputStream());  
    br=new BufferedReader(new InputStreamReader(netClient.getInputStream())); 我不是说过不能这样用了吗?!
      

  11.   

    br=new BufferedReader(new InputStreamReader(netClient.getInputStream())); 这句可以用阿,用它可以读出在传文件流之间的字符串,在读文件流之后确实如你所说,不能再用BufferedReader去读流了,读的数据会几十倍的增加,下午我已经领教过了。我先说一下我奥实现的功能把,就是在传文件之前,先获得客户端发来的文件名称字符串,
    在获得流,在服务器端读流建立以接收到的字符串为名字的文件。客户端在发完文件流后要给个结束标志。服务器端得到该标志再结束。对这些字符串的操作不就是用PrintWriter和BufferedReader吗?
      

  12.   

    修改如下,我成功传过 600M 的文件,以下代码用了中文全角空格
    public class NetConnection extends Thread {
      private boolean getFile(BufferedInputStream fromClient) {
        //......
        
          File acceptFile = new File("e:\\" + dwdm + ".exe");
          out = new FileOutputStream(acceptFile);
          try {
    //        while ( (num = fromClient.read(b, 0, fromClient.available())) >
    //            0) {        int BATCH_SIZE = 1024 * 100;
            byte[] b = new byte[BATCH_SIZE];
            while ( (num = fromClient.read(b, 0, BATCH_SIZE)) >
                0) {          out.write(b, 0, num);
              out.flush();
            }
            out.close();    //......
      }
    }
    不要用 available() 函数,不可靠。
    另外,建议用 BufferedInputStream,BufferedOutputStream 代替 FileInputStream,FileOutputStream, 性能会好很多。
      

  13.   

    to :jacklondon(jacklondon)
    我试了你改的方法,还是不稳定,文件还是有时会传得少。
    不过还是要谢谢