Контекст: Я очень опытный программист, но не очень опытный 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, который я бы , действительно, будут считаться недействительными. Однако я понятия не имею, почему номер порта будет потерян.
Любые идеи будут приветствоваться.
Дважды проверьте свойство 'jnlp.reg' и что он по-прежнему имеет порт 81 в URL-адресе. –
Ничего себе. Это не. И это было раньше, потому что у меня была отладка и проверили его. Пора разобраться в том, что здесь происходит. –
Ох, я уверен, у меня есть: вызовы происходят в разных контекстах, а вызов, который запрашивает JNLP, будет создан локально, поэтому он не использует явный порт. Когда я тестировал компонент раньше, я вызывал PHP, который напрямую генерирует JNLP (то есть дает явный URL браузера). Я не уверен, как это сделать, потому что обратный вызов из Java почти наверняка должен сделать это с явным портом, но в этом его суть. Если вы хотите, вы можете написать что-то, что я могу принять в качестве ответа. –