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

使用JAVA编写FTP客户端时如何使用PORT命令,java,ftp,Java,Ftp,我正在尝试使用java编写一个FTP客户端 据我所知,当我需要建立活动连接时,我需要使用PORT命令发送我的IP地址,但是, 我如何获得该IP地址 我正试图这样做,但显然是错误的: ServerSocket ssock = new ServerSocket(); ssock.bind(null); ssock.ssock.getLocalPort(); ssock.getInetAddress(); 最后一行返回null 那个么,我怎样才能将我的IP地址和端口发送到服务器呢 谢谢。使用端口命令

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

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

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

ServerSocket ssock = new ServerSocket();
ssock.bind(null);
ssock.ssock.getLocalPort();
ssock.getInetAddress();
最后一行返回null

那个么,我怎样才能将我的IP地址和端口发送到服务器呢


谢谢。

使用端口命令是固定要求吗

使用端口,您可以打开一个本地端口并在其上侦听。
然后将该端口号发送到服务器,服务器将与您连接。
当客户端位于路由器后面时,以及在某些防火墙上时,这可能会导致问题

因为许多客户端使用PASV命令。

在这种情况下,服务器向您发送端口号,您可以连接到它。

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

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

ssock.getHostName()

它将返回一个字符串,作为您的主机名或IP。

从另一个套接字(我最初用于连接ftp服务器的套接字)获取本地地址似乎是可行的

socket.getLocalAddress();

谢谢。

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

Sun JRE附带一个FTP客户端Sun.net.FTP.FtpClient。你可以看看他们是怎么做的


随着NAT和代理的广泛使用,端口命令很少起作用。你应该先尝试被动模式。正如您所看到的,Sun的客户端仅在PASV出现故障时才进行端口连接。

奇怪的是:为什么要重新发明轮子,而不是使用现有的、经过充分开发的FTP API之一,如Apache Commons Net FTPClient/FTPServer?学习目的?相当。。。是的,学习目的。实际上这是我的家庭作业。我需要执行端口命令。以后请用
作业
标签发布作业问题。这样我们可以给你更好的指导和更合适的答案。