繁体   English   中英

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

[英]How to use PORT command while writing an FTP client with JAVA

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

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

我想做这样的事情,但显然是错的:

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

最后一行返回null。

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

谢谢。

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

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

随着NAT和代理的广泛使用,PORT命令很少有效。 你应该先尝试被动模式。 如您所见,Sun的客户端仅在PASV失败时才进行PORT。

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

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

ssock.getHostName()

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

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

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

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

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

socket.getLocalAddress();

谢谢。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM