我上个月用sun.net.ftp.FtpClient开发了一个ftp客户端,服务端用serv-u6.0,发现有个奇怪的现象,全都在本机做测试非常正常,但是如果服务端在另一台电脑上的话连接就会很慢了。经测试,都是21秒多,后来发现了罪魁,就是OutputStream os = ftpClient.put(文件名); 21秒全让它给吃了,但我又没有别的办法,(说明:我用其他ftp工具都非常快)求各位高手指点一下迷津,先多谢各位了!我搞这个问题都一个多月了,快郁闷死了!
 FtpClient ftpClient = new FtpClient();
    try {
      ftpClient.openServer(host);
      ftpClient.login(username, password);
      if (serverpath != null && serverpath.length() != 0) {
        ftpClient.cd(serverpath);
      }
      ftpClient.binary();
      File file_in = new File(localfile);
      FileInputStream is = new FileInputStream(file_in);
      byte[] bytes = new byte[1024];
      int c;
      OutputStream os = ftpClient.put(serverfile);
      while ( (c = is.read(bytes)) != -1) {
        os.write(bytes, 0, c);
      }
      os.close();
      ftpClient.closeServer();
    }
    catch (Exception e) {
      e.printStackTrace();
    }

解决方案 »

  1.   

    用缓冲流试试
    FileInputStream is = new FileInputStream(file_in);
    BufferedInputStream fis= new BufferedInputStream(file_in,256) ;
    .....
      

  2.   

    21秒是耗在 OutputStream os = ftpClient.put(serverfile);
    而不是FileInputStream is = new FileInputStream(file_in);
      

  3.   

    我试过用sun.net.TelnetOutputStream这本来就是从BufferedOutputStream继承下来的,一样要这么长时间
      

  4.   

    发现有个奇怪的现象,全都在本机做测试非常正常,但是如果服务端在另一台电脑上的话连接就会很慢了
    -----------
    那说明你是网络的问题,或者换个版本的服务器吧,另外,连接有没有释放,
    应该有这么一个方法ftpClient.disconnect();
      

  5.   

    不行啊,谁有空麻烦帮测试一下,是不是也存在这种情况,另外,如果说是winsocket和sun的sock有兼容性问题的话,请推荐一款好的java开发的服务器端软件,谢谢