gpt4 book ai didi

java - URLConnection getInputStream 阻塞线程

转载 作者:行者123 更新时间:2023-11-30 11:35:16 29 4
gpt4 key购买 nike

我在 URLConnection 类中遇到了 getInputStream 方法的问题。我知道在其他线程中讨论了一些其他类似的问题,但似乎没有一个解决方案适用于我的情况。

有趣的是,当第一次执行顺利时,更多的执行失败(阻塞)。在描述这个问题之前,我想写一些背景知识。在这里。

基本上我有简单的客户端-服务器配置。由于我不想在客户端应用程序中对服务器地址和端口进行硬编码,因此我使用了 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() 方法的末尾。我仔细检查它是否干净地退出。

回到问题上来,我不知道是什么导致了这种情况发生。您有什么线索可能导致这种行为吗?

我还想提一下,服务和网络线程在与 Activity 不同的(后台)进程中运行。此过程中没有使用 URLConnection 的其他位置。值得注意的是,方法 obtainConnectionParameters 中使用的所有变量都是本地的。

我想描述中没有遗漏任何重要内容。否则请告诉我,以便我编辑我的帖子。

编辑(1):

我刚刚在线程 Make an HTTP request with android 中尝试了 apache HTTP 客户端 它运作良好。不过,我很想知道 URLConnection 有什么问题。

最佳答案

如果我没理解错的话,上面的代码 fragment 被调用了多次,第一次运行正常,但第二次它阻塞在 getInputStream() 调用上?

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

关于java - URLConnection getInputStream 阻塞线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15208851/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com