【发布时间】:2016-11-18 17:46:29
【问题描述】:
您好,我已经使用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 没有登录,为什么要我登录?
此代码未编译,因为它是从我的另一台计算机上记住的,所以如果您发现有问题,请告诉我,我会立即进行编辑。
【问题讨论】:
-
IIRC,当你构建一个套接字时,你正在围绕一个协议构建整个工作,但你必须设置它如何通过该协议进行通信。当您构建 URLConnection 对象时,您正在创建一个已经内置了这些工作的对象。也就是说,URLConnection 知道如何连接和登录,但在你正在构建的 Socket 中,它只知道如何物理连接。它不知道下一步该做什么。
-
@blahfunk 这正是我需要的!我需要有关 URLConnection 是如何工作的信息,它使用什么作为默认连接凭据我从哪里获得该信息?人们说用户名是匿名的或 ftp 和密码作为电子邮件,但我们不在那里使用我不知道的电子邮件。