java - 在 Java 中实现 FTP - 连接到 PASV 命令的 227 响应中指定的端口

标签 java sockets ftp network-programming

我正在尝试编写 FTP 客户端程序,但似乎无法连接到被动端口。我想最终列出目录并下载文件,但我也不知道该怎么做。

这是我的程序打印出来的内容。

PASV
227 Entering Passive Mode (73,13,156,129,217,103).
Passive Ports: 73,13,156,129,217,103
Failed to connect to port: 73
Failed to connect to port: 13
Failed to connect to port: 156
Failed to connect to port: 129
Failed to connect to port: 217
Failed to connect to port: 103
"/home/daniel">>
<小时/>
case 227://PASSIVE MODE
    String psPorts = lastMessage.substring(lastMessage.indexOf('(')+1,lastMessage.indexOf(')'));
    System.out.println("Passive Ports: " + psPorts);
    for(String i : psPorts.split(",")){
        Ports.add(Integer.parseInt(i));
    }

    for(int i: Ports){
        try{
            pSk = new Socket("webserver",i);
            break;
        }catch(Exception e){
            System.out.println("Failed to connect to port: " + i);
        }
    }
    break;

有人可以帮我吗?非常感谢您的帮助。

最佳答案

响应 PASV 命令的 227 中的数字不是端口号。

格式为:

IP_A,IP_B,IP_C,IP_D,PORT_HI,PORT_LO

所以你需要连接到

pSk = new Socket("IP_A.IP_B.IP_C.IP_D", PORT_HI<<8 + PORT_LO);

以上是伪代码(我不做Java)。

关于java - 在 Java 中实现 FTP - 连接到 PASV 命令的 227 响应中指定的端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33206082/

相关文章:

file-upload - PHP 中的 ftp 上传是如何工作的?

Linux LFTP 通过 FTPS 连接和镜像文件夹,无需对 bitbucket 管道进行证书验证

java - float[] 差异

java - SocketInitiator 的队列容量使用情况 (QuickFIX/J)

c - 为什么在运行服务器套接字并使用 shutdown() 后我在该目录中有一个文件?

c - recv 只获取包的前 4 个字节

java - JScrollPaneLayout怎么设置和JTable一样?

java - 为什么我的代码不能可靠地单击下拉菜单项?

c++ - boost::dynamic_bitset 如何存储位

bash - 编写在 FTP 服务器上移动文件的脚本