2009-12-08 41 views
2

我正在嘗試使用java編寫FTP客戶端。如何在使用JAVA編寫FTP客戶端時使用PORT命令

據我所知,我需要發送我的IP地址與PORT命令,當我需要建立一個活動的連接,但是, 如何獲得該IP地址?

我試圖做這樣的事情,但它顯然是錯誤的:

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

最後一行返回null。

那麼我又能如何將我的IP地址和端口發送到服務器?

謝謝。

+2

只是好奇:爲什麼重新發明輪子而不是使用現有的和完全開發的FTP API之一,如Apache Commons Net FTPClient/FTPServer?學習目的? – BalusC 2009-12-08 23:25:22

+0

相當... http://commons.apache.org/net/apidocs/org/apache/commons/net/ftp/FTPClient.html – skaffman 2009-12-08 23:35:23

+0

是的學習目的。其實這是我的功課。我需要執行PORT命令。 – slhsen 2009-12-08 23:40:27

回答

3

您需要先連接,然後撥打socket.getLocalAddress()以獲取正確的本地地址。當您有多個IP時,只有在建立連接後才能知道到達特定目的地的正確地址。

Sun JRE附帶了一個FTP客戶端sun.net.ftp.FtpClient。你可以看看他們是如何做到的。

隨着NAT和代理的廣泛使用,PORT命令很少起作用。你應該先嚐試被動模式。正如你所看到的,當PASV失敗時,Sun的客戶端只做PORT。

0

正在使用PORT命令的一個固定要求?

用PORT打開本地端口並聽取它。
然後您將該端口號發送到服務器,並與您連接。
當客戶端位於路由器後面並且還帶有一些防火牆時,可能會導致問題。

由於許多客戶使用PASV命令。
在這種情況下,服務器向您發送一個端口號,您可以連接到它。

1

服務器套接字將接受來自任何IP地址的連接。因此,如果您的計算機的正常IP地址是1.2.3.4,它將接受1.2.3.4和127.0.0.1上的連接。您需要指定要使用的實際IP地址。對於正常使用ftp,我想你可以從你的控制通道套接字的本地地址得到這個。地址也可以從java.net.NetworkInterface中獲得,但是您仍然有決定正確界面的問題。

1

要獲得你的IP地址,你可以嘗試

ssock.getHostName() 

這將返回一個字符串,這將是您的主機名或IP地址。

0

從其他套接字(我用來在第一個地方連接ftp服務器)獲取本地地址似乎工作。

socket.getLocalAddress(); 

謝謝。

相關問題