Java io.FileNotFoundException;可疑港口
上下文:我是一个非常有经验的程序员,但不是一个非常有经验的Java程序员 我继承了一小段代码,它生成JNLP来包装一个JAR,以便收集有关客户端计算机的一些信息。在URL中没有显式指定端口的上下文中,这总是很好,但在需要显式指定端口的测试环境中,这是失败的 相关的Java代码是:Java io.FileNotFoundException;可疑港口,java,url,port,java-io,Java,Url,Port,Java Io,上下文:我是一个非常有经验的程序员,但不是一个非常有经验的Java程序员 我继承了一小段代码,它生成JNLP来包装一个JAR,以便收集有关客户端计算机的一些信息。在URL中没有显式指定端口的上下文中,这总是很好,但在需要显式指定端口的测试环境中,这是失败的 相关的Java代码是: URL RegURL = new URL(System.getProperty("jnlp.reg")); ... try { //Create connection connection = (HttpUR
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,我确实认为它是无效的。但是,我不知道为什么端口号会丢失
欢迎提供任何见解。如中所述,您可能需要设置用户代理
和接受
属性。我的猜测是,如果您使用非标准端口,URLConnection
无法正确猜测您希望接收的内容类型。它与端口号没有任何关系。在服务器上找不到您提到的URL。HTTP状态404。您无法从错误的端口号获得该端口号:您将获得一个ConnectException。再次检查属性jnlp.reg
,并且它在url.Wow中仍然有端口81。不是。今天早些时候,因为我进行了一些调试并检查了它。是时候弄清楚这到底是怎么回事了。哦,我打赌我明白了:调用发生在不同的上下文中,而请求构建JNLP的调用来自本地,因此它不使用显式端口。当我在前面测试组件时,我调用了直接生成JNLP的PHP(即,给出一个显式的浏览器URL)。我不确定我将如何实现这一点,因为来自Java的回调几乎肯定需要使用显式端口来实现,但这是它的本质。如果你愿意,你可以写一些我可以接受的答案。当我们使用.htaccess将*.jnlp
映射到*.jnlp.php
时,可能发生了一些事情。毫无疑问,他们设法在那里失去了一些背景。至少现在我知道该做什么了!可能不相关:但是urlParameters.getBytes().length)
获取默认编码中的长度,该长度可能不同于消息正文的编码(通常为UTF-8)。找不到该长度,因为没有端口号,该长度会转到不同的物理服务器,因此,是的,它与端口号相关。