[英]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.