gpt4 book ai didi

java - 无法从外部 ip 将文件传输到 proftpd 服务器

转载 作者:行者123 更新时间:2023-11-30 09:40:57 25 4
gpt4 key购买 nike

我正在制作一个适用于我的 ProFtpd 服务器的基本 FTP 传输应用程序。

在本地网络上,以下代码有效。但是,当我使用此代码并尝试通过外部 IP 连接时,(是的,我将 IP 更改为我的外部 IP)我收到错误:

sun.net.ftp.FtpProtocolException: PORT :500 Illegal PORT command, EPSV ALL in effect

另外,在浏览器中连接到ftp服务器导致外部IP延迟一两分钟,但我不知道是否相关。

这是我的代码:

URL url=new URL("ftp://"+username+":"+password+"@"+ip+path+recipient+"/"+sendMe.getName());
URLConnection con=url.openConnection();
System.out.println("connected");

FileInputStream input=new FileInputStream(sendMe);
BufferedOutputStream output=new BufferedOutputStream(con.getOutputStream());
System.out.println("output Stream");

int c;
int size=0;
TransferDialog transfer=new TransferDialog("0 bytes processed");

while ((c = input.read()) != -1) {
output.write(c);
size++;
transfer.changeText(size+" bytes processed");
System.out.println(size);
}

if (input != null) {
input.close();
}
if (output != null) {
output.close();
}
System.out.println("Uploaded");

运行时,将出现错误而不是“输出流”消息。感谢您提供任何帮助或建议!

最佳答案

看起来你正在尝试制作一个 Active FTP connection通过您的外部 IP,当两者之间可能有防火墙时。您需要启动一个 Passive connection相反,它旨在处理防火墙等(因为所有连接都是客户端在被动模式下启动的)。

这在您在内部 执行时有效,因为您的客户端和服务器之间没有防火墙。请记住,防火墙(在其默认配置中)会阻止所有非客户端发起的 TCP 连接。

关于java - 无法从外部 ip 将文件传输到 proftpd 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9213454/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com