【发布时间】:2017-11-24 21:43:35
【问题描述】:
我有一个使用 java.net.Socket 与 PC 进行无线通信的 Android 设备。一切都很好,但是如果我在 1 分钟内什么都不做(即没有使用网络),那么当 Android 向 PC 发送一个数据包时,PC 会接收它并发送一个 ACK,但 Android 会以 RST 响应。
来自 Wireshark(10.1.2.1 是 Android,10.1.2.11 是 PC)...
356 0.112470 10.1.2.1 10.1.2.11 TCP 97 34360→181 [PSH, ACK] Seq=1 Ack=1 Win=4935 Len=31 TSval=156103571 TSecr=320673352
359 0.000011 10.1.2.11 10.1.2.1 TCP 66 181→34360 [ACK] Seq=1 Ack=32 Win=260 Len=0 TSval=320738236 TSecr=156103571
360 0.000304 10.1.2.1 10.1.2.11 TCP 60 34360→181 [RST] Seq=32 Win=0 len=0
此时,如果我询问套接字的成员变量,它会说 . . .
- isConnected = true
- isCreated = true
- isInputShutdown = 假
- isOutputShutdown = 假
- isClosed = 假
- isBound = true
...看起来我应该仍然可以正常接收数据包。 那么我该如何弄清楚我为什么要发送 RST?
注意 - 没有设置“睡眠”或关闭 wifi 或显示器或此设备上启用的任何其他省电功能设置。
【问题讨论】:
-
当我运行wireshark时,第二列是wireshark捕获数据包时的时间戳,以秒为单位,单调递增。
-
我的它设置为自上次捕获数据包以来的增量