当前位置: 首页 > 知识库问答 >
问题:

从头开始构建FTP客户端:错误“425无法打开数据连接进行传输”

张嘉佑
2023-03-14

我正在尝试用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循环(暂时),直到我可以连接到数据端口。

共有3个答案

袁帅
2023-03-14

我想通了。问题是服务器试图连接到一个端口,但它不是正确的。我决定做的是把服务器在被动模式,并连接到我看到的套接字。当它以“227进入被动模式(127,0,0,1,194,16)。最后两个数字是端口号。你必须把这些小数变成十六进制,然后把两个十六进制数字放在一起得到整个端口号。具体来说,在这种情况下,十进制中的194等于十六进制中的“C2”,十进制中的16等于十六进制中的“10”,这两个十六进制数字加在一起,你会得到“C210”,当你把它们转回十进制时,你会得到“49680”您必须连接到的端口号。

  clientSocket = new Socket(127.0.0.1, 21);
  reader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
  writer = new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream()));

  writer.write("USER " + Anonymous + "\n");
  writer.flush();
  writer.write("PASS " + "" + "\n");
  writer.flush();
  writer.write("PASV");
  writer.flush()
  String testPort = scanner.nextLine(); //type in the number you get when you do math
                                        //in this case 49680
  socketServer = new Socket(host, Integer.parseInt(testPort));

它应该连接数据端口。显然,这不是最终的计划,但它是一个概念证明。谢谢你帮助过我们的人。

许亦
2023-03-14
serverSocket = new ServerSocket(50222);

这将在端口50222上创建侦听套接字。

writer.write("PORT 127,0,0,1,0,14");

这会告诉服务器在端口14上连接到您。

想想吧。

仲孙鸣
2023-03-14

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

 类似资料:
  • 我用这个上传一些文件。如果我在本地连接中,它可以工作,但如果我使用外部连接,我会收到以下消息:

  • 我正在使用Teamcity在FTP中部署我的Web应用程序。在周一之前,部署工作一直很顺利。现在它不再工作了。我没有对Teamcity做任何更改。问题:FTP传输正常启动。一些文件被传输。然后它会中断FTP错误:“425无法打开数据连接”。FTP部署在我的所有其他Web应用程序上都可以正常工作。关于这个问题你能给我一个提示吗?teamcity步骤配置 日志: [13:57:10]i:[步骤1/1]

  • 我目前正在网络上运行FileZilla FTP服务器。我的问题是,在看似随机的机器上,当用户导航到一个目录(他们可以这样做)并尝试ls(即数据传输)时,他们的终端挂起等待响应,而服务器报告上述

  • 我需要编写一个连接到FTP服务器的应用程序。此FTP服务器不允许被动模式连接。我可以使用Filezilla连接到FTP服务器。 我开发了一个C#WCF服务,它使用FTPWebRequest类连接到此FTP服务器。以下是FTPWebRequest对象的基本设置: 当我从Visual Studio(Ctrl F5)运行WCF服务时,它连接到FTP服务器并下载所需的文件,没有任何问题 但是,当我在本地I

  • 我正在使用Teamcity在FTP中部署我的Web应用程序。在周一之前,部署工作非常顺利。现在它不再起作用了。我没有对团队城做任何修改。问题:FTP传输正常启动。有些文件被转移。然后它以FTP错误中断:“425无法打开数据连接”。FTP部署在我的所有其他Web应用程序上都运行良好。你能给我一个关于这个问题的提示吗?TeamCity step配置 日志: [13:57:10]I:[步骤1/1]<25

  • 我想将我的Azure Web应用程序创建的文件传输到Azure网络之外的FTP服务器。我得到的只是FTP上的0字节文件和Web应用程序上的“425无法打开数据连接”错误。 Azure Web应用程序或FTP服务器上是否缺少设置?在我的本地IIS Express上使用相同的Web应用程序可以正常工作。该Web应用程序使用ASP。NETMVC5。 编辑1: 这是我用来发送文件的代码: 根据MSDN,被