taj*_*hal 5 java sockets android tcp
我遇到Java TCP/IP套接字问题:我的Java应用程序将继续无休止地将数据发送到服务器,即使服务器在此期间关闭(没有正确的TCP/IP断开连接).
我使用以下代码发送数据:
PrintWriter out = PrintWriter(socket.getOutputStream(), true);
out.write("text");
if (out.checkError()) {
System.err.println("Error sending string!");
}
Run Code Online (Sandbox Code Playgroud)
在另一个Stack Overflow问题中,我找到了以下答案:
TCP/IP(以及因此java套接字)将保证您成功发送数据或最终获得错误(在java的情况下例外).
我的代码是否足以让我们了解TCP/IP堆栈无法成功发送我的字符串或我是否需要另外做一些事情?
顺便说一句:即使另一个问题相似,打开一个新问题是否正确?它没有令人满意地回答我的问题,我只能添加一个新的答案,而不是一个新的评论.
我没有提到(因为我认为这在当时不相关)是我正在尝试在 Android 上执行此操作。
然而,经过几周的测试后,标准 Java 网络类的 Android 实现的行为似乎与 Oracle JRE 非常不同。在Android上,显然不可能可靠地检测连接是否已关闭,即使我自己关闭了它。[Stream].write()将尝试写几分钟。因此,在 Android 上,您似乎始终需要发送自己的 keep-alive(并检查接收情况!)以检测断开的连接。
这个问题的其他答案可以很好地与 Oracle JRE 配合使用。再次感谢!
如果有人可以提供有关此主题的更多信息,请这样做。
| 归档时间: |
|
| 查看次数: |
2714 次 |
| 最近记录: |