服务器发送FIN数据包时Socket.getInputStream.read(...)在Android上引发SocketException

时间:2019-01-18 21:34:49

标签: java android sockets tcp

我正在尝试为Android实现一个客户端应用程序,该应用程序使用Socket连接到服务器,交换一些数据,然后以一种优雅的方式终止连接,如本文所述:

https://docs.oracle.com/javase/8/docs/technotes/guides/net/articles/connection_release.html

但是,客户端套接字在断开连接期间的行为与预期不符。

  1. 我们已经在Android客户端和服务器之间建立了连接。

  2. 客户端完成所有数据的发送并调用socket.shutdownOutput()(将FIN发送到服务器)。

  3. 服务器接收最后一个字节并调用其socket.shutdownOutput()(将FIN发送给客户端)。

  4. 客户端从服务器读取最后一个字节,对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上的问题?

0 个答案:

没有答案