gpt4 book ai didi

android - 如果我的套接字已连接但未关闭,为什么我要发送 RST?

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

我有一个 Android 设备,它使用 java.net.Socket 与 PC 进行无线通信。一切都很好,但如果我在整整 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

在这一点上,如果我询问套接字的成员变量,它会说。 . .

  • 已连接=真
  • isCreated = true
  • isInputShutdown = false
  • isOutputShutdown = false
  • isClosed = false
  • isBound = true

...看起来我应该仍然可以很好地接收数据包。 那么我如何弄清楚为什么要发送 RST

注意 - 此设备上没有“ sleep ”或关闭 wifi 或显示器或任何其他省电功能的设置。

最佳答案

1 分钟的延迟看起来像是超时。它可能是 SO_TIMEOUT 但这本身不会生成网络 Activity 。此外,最后发送的数据包包含 31 个字节的数据这一事实似乎表明涉及应用程序。一个可能的场景是:

  • Android 应用程序超时(自行超时或由套接字的 SO_TIMEOUT 触发)
  • 它发送最后一个数据 block ,例如通过刷新输出流。
  • 它突然关闭套接字,例如通过使用 setSoLinger(true, 0) 套接字选项。

关于android - 如果我的套接字已连接但未关闭,为什么我要发送 RST?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44685374/

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