如何在使用JAVA编写FTP客户端时使用PORT命令

时间:2009-12-08 23:22:28

标签: java ftp

我正在尝试使用java编写FTP客户端。

据我了解,当需要建立活动连接时,我需要使用PORT命令发送我的IP地址,但是, 我如何获得该IP地址?

我正在尝试这样做,但显然是错误的:

ServerSocket ssock = new ServerSocket();
ssock.bind(null);
ssock.ssock.getLocalPort();
ssock.getInetAddress();

最后一行返回null。

那么我又如何将我的IP地址和端口发送到服务器?

谢谢。

5 个答案:

答案 0 :(得分:3)

您需要先连接,然后调用socket.getLocalAddress()以获取正确的本地地址。当您有多个IP时,您只知道在建立连接后到达特定目的地的正确地址。

Sun JRE附带了一个FTP客户端sun.net.ftp.FtpClient。你可以看看他们是如何做到的。

随着NAT和代理的广泛使用,PORT命令很少有效。你应该先尝试被动模式。如您所见,当PASV发生故障时,Sun的客户端仅执行PORT。

答案 1 :(得分:1)

服务器套接字将接受来自任何IP地址的连接。因此,如果您的机器的正常IP地址是1.2.3.4,它将接受1.2.3.4和127.0.0.1上的连接。您需要指定要使用的实际IP地址。对于ftp的正常使用,我想你可以从控制通道套接字的本地地址获取。也可以从java.net.NetworkInterface获取地址,尽管您遇到了确定正确接口的问题。

答案 2 :(得分:1)

要获取您的IP地址,您可以尝试

ssock.getHostName()

将返回一个String,它将是您的主机名或IP。

答案 3 :(得分:0)

使用PORT命令是固定的要求吗?

使用PORT打开本地端口并收听它 然后将该端口号发送到服务器并与您连接 当客户端在路由器后面并且还有一些防火墙时,这可能会导致问题。

因为许多客户使用PASV命令 在这种情况下,服务器会向您发送一个portnumber,您可以连接到它。

答案 4 :(得分:0)

从其他套接字(我用来连接ftp服务器的那个套接字)获取本地地址似乎有效。

socket.getLocalAddress();

谢谢。