gpt4 book ai didi

Android 上的 Java - 出现 InputStream 超时错误的奇怪套接字行为

转载 作者:可可西里 更新时间:2023-11-01 02:43:39 24 4
gpt4 key购买 nike

我有一个应用程序,它使用 Socket 类的实例与服务器通信。我使用 socket.getInputStream()socket.getOutputStream() 返回的流来读取和写入数据。

当我的 Android 应用程序始终处于“Activity ”状态(未最小化)时,通信没有问题。连接持续多久并不重要。

当我“暂停”应用程序并快速重新打开它时,一切仍然正常。但是,当我暂停应用程序大约 5 分钟并重新打开它时,InputStream 显示出奇怪的行为:它停止读取任何内容。我收到超时错误,而不是服务器发送的数据。

连接仍然存在,服务器可以读写。客户端的 isInputShutdown() 返回 false。

使用网络分析工具,我还可以看到服务器发送的数据实际上到达了客户端,但不知何故没有被 InputStream 识别 ...

但是,使用 OutputStream 将数据从客户端写入服务器工作正常。

也许值得一提的是,套接字对象和流被声明为 static 以供应用程序的所有 Activity 访问。但由于我对 OutputStream 没有任何问题,我无法想象这可能是原因。

此时我唯一的解决方法是关闭整个套接字并将一个新套接字连接到服务器。但这会导致不必要的网络流量,因为我必须再次握手。最好不要这样做。

如果有人有类似的经历并找到了解决方案,如果你能与我分享,我将非常高兴。

最佳答案

您应该创建一个将在后台运行的服务,并实现与服务器的套接字连接。

关于Android 上的 Java - 出现 InputStream 超时错误的奇怪套接字行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24740930/

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