我正在尝试为Android实现一个客户端应用程序,该应用程序使用Socket
连接到服务器,交换一些数据,然后以一种优雅的方式终止连接,如本文所述:
https://docs.oracle.com/javase/8/docs/technotes/guides/net/articles/connection_release.html
但是,客户端套接字在断开连接期间的行为与预期不符。
我们已经在Android客户端和服务器之间建立了连接。
客户端完成所有数据的发送并调用socket.shutdownOutput()
(将FIN
发送到服务器)。
服务器接收最后一个字节并调用其socket.shutdownOutput()
(将FIN
发送给客户端)。
客户端从服务器读取最后一个字节,对socket.getInputStream().read(...)
的最后一次调用将引发以下异常:
java.net.SocketException: recvfrom failed: ECONNRESET (Connection reset by peer)
,原因:android.system.ErrnoException: recvfrom failed: ECONNRESET (Connection reset by peer)
我希望对socket.getInputStream().read(...)
的最后一次调用应返回-1
,这是我在Ubuntu的OpenJDK 11上运行相同代码时得到的行为。
是否有Socket
的某些设置可以解决Android上的问题?