我正在尝试使用java编写FTP客户端。
据我了解,当需要建立活动连接时,我需要使用PORT命令发送我的IP地址,但是, 我如何获得该IP地址?
我正在尝试这样做,但显然是错误的:
ServerSocket ssock = new ServerSocket();
ssock.bind(null);
ssock.ssock.getLocalPort();
ssock.getInetAddress();
最后一行返回null。
那么我又如何将我的IP地址和端口发送到服务器?
谢谢。
答案 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();
谢谢。