您好我已使用URLConnection
连接到FTP,只使用了IP地址但没有指定登录凭据。
URLConnection conn = new URLConnection(new URL("ftp://222.101.102.1/etc"));
它没有凭据,因为服务器可能允许匿名连接。
但是对于练习我想从头开始与Socket
客户端建立ftp连接,并且我创建了一个到该IP的新套接字连接:
Socket socket = new Socket("222.101.102.1", 21);
if (socket != null) {
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String version = reader.readLine();
System.out.println(version);
}
这会打印220 vsFTPd (2.0.5)
但是当我尝试执行LS \r\n
我得到530 Please login with USER and PASS
如果URLConnection
没有登录,为什么要求我登录?
此代码未编译,因为它是从我的其他计算机中存储的,所以如果您发现错误并让我立即编辑,请告诉我。
答案 0 :(得分:4)
我设法搞清楚了。
URL.openConnection()
基本上返回一个基于协议实现URLStreamHandler
的类。因此,在这种情况下,协议为ftp
,并返回FtpURLConnection
。
所以检查一下,如果用户名为null(未在URL中指定),如果是,则将其设置为匿名并使用带有@的
的java版本的密码例如Java1.8.0@
不确定用于登录历史的目的。
但是你可以使用任何密码来匿名登录,除非它为我认为的其他东西配置。
if(this.user == null) {
this.user = "anonymous";
String var11 = (String)AccessController.doPrivileged(new GetPropertyAction("java.version"));
this.password = (String)AccessController.doPrivileged(new GetPropertyAction("ftp.protocol.user", "Java" + var11 + "@"));
}
所以我基本上使用Anonymous
和无密码登录。