2014-01-13 84 views
1

上下文:我是一個非常有經驗的程序員,但不是一個非常有經驗的Java程序員。Java io.FileNotFoundException;可疑端口問題

我已經繼承了一小部分代碼來生成JNLP以包裝JAR以收集有關客戶端計算機的一些信息。在沒有在URL中明確指定端口的情況下,這一直運行良好,但在需要明確指定端口的測試環境中失敗。

相關的Java代碼:

URL RegURL = new URL(System.getProperty("jnlp.reg")); 
... 

try { 
    //Create connection 
    connection = (HttpURLConnection)RegURL.openConnection(); 
    connection.setRequestMethod("POST"); 
    connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
    connection.setRequestProperty("Content-Length", "" + Integer.toString(urlParameters.getBytes().length)); 
    connection.setRequestProperty("Content-Language", "en-US"); 
    connection.setUseCaches(false); 
    connection.setDoInput(true); 
    connection.setDoOutput(true); 

    //Send request 
    DataOutputStream wr = new DataOutputStream (connection.getOutputStream()); 
    wr.writeBytes (urlParameters); 
    wr.flush(); 
    wr.close(); 

    //Get Response 
    InputStream is = connection.getInputStream(); 
    ... 
} catch (Exception e) { 
    ... 
} finally { 
    ... 
} 

RegURL的形式"http://arthur.OURCOMPANY.com:81/fb/register.php"的價值,我們已經確認是這種情況。但我得到一個客戶端的錯誤:

java.io.FileNotFoundException: http://arthur.OURCOMPANY.com/fb/register.php 
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source) 
    at main.main(main.java:253) 
    ... 

這意味着該錯誤是由行解僱InputStream is = connection.getInputStream(); 我認爲,這意味着地方沿途的端口號迷路了它使用的是URL,我會的確,預計會失效。但是,我不知道爲什麼端口號會丟失。

任何見解都會受到歡迎。

+1

仔細檢查屬性'jnlp.reg',並且它在url中仍有端口81。 –

+0

哇。不是。今天早些時候,因爲我有一些調試和檢查它。是時候弄清楚這裏到底發生了什麼。 –

+0

噢,我打賭我明白了:調用發生在不同的上下文環境中,並且要求構建JNLP的調用將在本地進行,因此它不使用明確的端口。當我在前面進行組件測試時,我正在調用直接生成JNLP的PHP(即給出明確的瀏覽器URL)。 我不確定我將如何完成這項工作,因爲Java的回調幾乎肯定需要使用顯式端口來完成,但這是它的本質。如果你願意,你可以寫一些我可以接受的答案。 –

回答

0

如在this answer中提到的,您可能需要設置User-AgentAccept屬性。我的猜測是,如果您使用非標準端口,則URLConnection無法正確猜測您期望收到的內容類型。

-1

它與端口號沒有任何關係。您提到的網址在服務器上找不到。 HTTP狀態404.你不能從一個錯誤的端口號得到它:你會得到一個ConnectException。

+0

沒有找到它,因爲如果沒有端口號,這會轉到不同的物理服務器,所以,是的,它與端口號有關。 –