【发布时间】:2013-05-17 14:19:27
【问题描述】:
我们将 Android 设备用作由 PC 控制的工业过程的遥控器。
有时连接可能会意外断开 - 电池没电、Android 设备超出范围、网络问题、无线接入点重置、Android 重新启动等。在这些情况下,PC 可能不“知道”它已断开连接,因为它从未获得 FIN。
所以当我在 Android 端重新启动时,我正在初始化套接字时,我会做一个
sock = new Socket(ipAddress, portNumber);
在网络嗅探器 (Wireshark) 上,我可以看到 Android 发送了一个 SYN。但是由于 PC 不知道它已断开连接,即它认为它仍然从以前连接,它发送 RST、ACK。这会导致 Android Socket 构造函数返回 null。
我需要做的是向 PC 发送 FIN,而不是 SYN。但我认为 SYN 必须是握手中的第一个数据包(我不是网络专家)。或者,不以 SYN 开头,所以我可以开始重新使用连接,就好像什么都没发生一样。有没有办法做到这一点?如何从 Android 端打破这种僵局? (我无法控制 PC 的功能)
提前致谢。
【问题讨论】: