2

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

4

1 回答 1

1

如果我理解正确,上面的代码片段被多次调用,第一次运行正常,但第二次阻塞 getInputStream() 调用?

问题可能出在服务器端。也许服务器一次只接受一个连接,而您建立的第一个连接仍然打开?是否可以多次使用浏览器打开 url,以验证服务器是否按预期工作?

于 2013-03-04T20:22:50.657 回答