我试图用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
进行接受时,您不会告诉服务器可以在何处找到此套接字,例如您之前没有发出PORT
或EPRT
命令。在尝试实施协议之前,请深入了解协议文档(主要是RFC959)。