如题,使用的是apache的net类库,FTPClient,贴代码:public static void main(String[] args) throws IOException {
FTPClient ftp = new FTPClient();
int reply;
ftp.connect("***.***.***.***");
ftp.login("***", "***");
System.out.println(ftp.getReplyString());
reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
System.err.println("FTP server refused connection.");
System.exit(1);
}
InputStream is = new FileInputStream("d:/1/2/4.txt");
OutputStream os = ftp.storeFileStream("/home/test/4.txt");
byte[] buffer = new byte[1024];
int len;
while((len = is.read(buffer)) != -1) {
os.write(buffer, 0, len);
}
is.close();
os.close();
ftp.logout();
if(ftp.isConnected()) {
ftp.disconnect();
}
}连接是没有问题的,可以登录成功,但是storeFileStream得到的os却是null的,求助。

解决方案 »

  1.   

    哦,忘记说了,本机是windows,ftp是linux
      

  2.   

    很有可能是调用ftp.getReplyCode之类的返回FTP服务端上次命令处理的结果的一些方法,使用不当造成的。FTP协议,要涉及到两个socket,一个是控制信息,一个是数据信息。
    如果客户端方面存在NAT(PAT)之类的转换,还要注意使用被动模式(都是外网IP则使用主动模式)传输数据。那些个返回上一个命令处理结果的方法,有时候会被FTPClient对象中的某个方法调用过,
    我记得,这些方法,貌似不能重复调用的。楼主可以尝试:
    1。查看login方法是否已经带有返回值,如果有,则直接根据返回值进行判断。
    2.删掉查询登陆结果的代码试试,也许问题就出在这里。
      

  3.   

    我现在是通过外网访问FTP,楼上说的是删掉reply是吗,删掉之后也是null,登录返回的是true。
      

  4.   

    public static void main(String[] args) throws IOException {
            FTPClient ftp = new FTPClient();
            int reply;
            ftp.connect("***.***.***.***");
            if (!ftp.login("***", "***")) {
                ftp.disconnect();
                System.err.println("FTP server refused connection.");
                System.exit(1);
            }
            InputStream is = new FileInputStream("d:/1/2/4.txt");
            OutputStream os = ftp.storeFileStream("/home/test/4.txt");
            byte[] buffer = new byte[1024];
            int len;
            while((len = is.read(buffer)) != -1) {
                os.write(buffer, 0, len);
            }
            is.close();
            os.close();
            ftp.logout();
            if(ftp.isConnected()) {
                ftp.disconnect();
            }
        }
      

  5.   

    还是null,可能是我的FTP有问题,但是用ftp工具连接是没问题的
      

  6.   

    可能是“/home/test/4.txt”路径下的文件不存在。
    FTP还有一个比较麻烦的问题是“相对路径”和“绝对路径”在编程中,选哪种来用。
    反正,我都选绝对路径,虽然,每次都要拼接地址,但是,排错较容易些。
      

  7.   

    即使我创建好了也是null的
    而且是不存在的时候创建吧。
      

  8.   

    说错了,不存在的时候确实返回null,现在我创建了,用的也是绝对路径,怎么就不好使呢,不解
      

  9.   

    不用这个类库了,用SUN的FtpClient了,搞定我的需求了,这个为NULL的问题以后再研究