我试图用Java从头开始制作一个FTP客户端。

我将Filezilla用作服务器,并且可以连接到特定位置。我的意思是说我可以使用命令端口,但是无论我进行多少搜索,都无法连接数据端口。

我寻找的所有网站都说问题与防火墙和/或路由器有关,但是,当我尝试使用Filezilla客户端连接到服务器时,一切都进行得很好。

到目前为止,我有:

    serverSocket = new ServerSocket(20);
    socket = new Socket(127.0.0.1, 21);
    reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

    writer.write("USER " + Anonymous + "\n");
    writer.flush();
    writer.write("PASS " + "" + "\n");
    writer.flush();
    writer.write("PORT 127,0,0,1,0,14");
    writer.flush();
    writer.write("EPRT |1|127.0.0.1|20|");
    writer.flush()
    dataSocket = serverSocket.accept();


那将我登录到服务器并断开连接。为了解决这个问题,我在线程内(暂时)添加了一个infinte while循环,直到可以连接到数据端口为止。

最佳答案

当您对(可能是)数据套接字socket2进行接受时,您不会告诉服务器可以在何处找到此套接字,例如您之前没有发出PORTEPRT命令。在尝试实施协议之前,请深入了解协议文档(主要是RFC959)。

10-01 21:40