Android-HttpUrlConnection没有关闭。最终导致SocketException


问题内容

我在运行Jellybean(4.1-4.3)的设备中遇到HttpUrlConnection的一些问题,其中连接未关闭,并且执行多次后导致SocketException“打开的文件过多”。

我确实调用了HttpUrlConnection.disconnect()并在finally块中关闭了所有Inputstream,Outputstream,Reader和Writers。

转到adb shell并执行a将netstat显示该应用程序创建的所有连接均处于CLOSE_WAIT状态。

InputStream inputStream = httpUrlConnection.getInputStream();

// After calling inputStream.read() then the problem occurs. I think the 
// inputstream doesn't get closed even after calling close in a finally block. 
// The InputStream is a ChunkedInputStream if that helps.

我尝试了在2.3.3、4.0.3和4.4上运行的其他设备,但没有遇到此问题。

还有另一种方法可以手动关闭连接吗?


问题答案:

我终于找到了解决方法。似乎软糖在“保持活动”连接上有问题。我刚刚将Connection =
Close添加到我的请求标头中,现在一切正常。在执行netstat时,我看到连接现在正在关闭,并且由于“打开的文件太多”,我不再得到SocketException。