我在getInputStream
课程中遇到了URLConnection
方法的问题。我知道在其他线程中讨论过其他一些类似的问题,但在我的案例中似乎没有单一的解决方案。
有趣的是,当第一次执行顺利时,进一步失败(阻止)。在描述问题之前,我想写一些背景知识。在这里。
基本上我有简单的客户端 - 服务器配置。由于我不想在客户端应用程序中硬编码服务器地址和端口,因此我使用HTTP服务器(nginx
),从中可以检索实际的连接参数。
在客户端,有一个由服务控制的“网络线程”。服务启动线程并在需要时可以中断它。在run()
方法的最开始,调用了以下函数:
private ConnectionParameters obtainConnectionParameters(String url) throws MalformedURLException, IOException {
URLConnection connection = new URL(url).openConnection();
InputStream in = connection.getInputStream(); // here the problem occurs
... // do some processing
in.close();
return connectionParameters;
}
获取连接参数后,将打开另一个套接字连接。一段时间后,线程可能会关闭或只是到达run()
方法的结尾。我仔细检查了它是否干净利落。
回到这个问题,我不知道是什么导致这种情况发生。你有什么可能导致这种行为的线索吗?
我还想提一下,服务和网络线程在活动的单独(后台)过程中运行。在这个过程中没有其他地方使用URLConnection
。值得注意的是,方法obtainConnectionParameters
中使用的所有变量都是本地的。
我想在描述中没有遗漏任何重要内容。否则请告诉我,所以我可以编辑我的帖子。
编辑(1):
我刚刚在线程Make an HTTP request with android中尝试过apache HTTP客户端
它运作良好。不过,我很想知道URLConnection
出了什么问题。
答案 0 :(得分:1)
如果我理解正确的话,上面的代码片段会被多次调用,并且它第一次正常工作,但第二次在getInputStream()调用时阻塞?
问题可能出在服务器端。也许服务器一次只接受一个连接,你建立的第一个连接仍然是开放的?是否可以多次使用浏览器打开URL,以验证服务器是否按预期工作?