我在python
中有一个服务器
程序,它向android 客户端
发送和接收数据包
。我在 android 客户端
中使用 TCP
和 sockets
来与 python
程序通信。
一切正常,但是当 server
因 NSF 电源故障而关闭时,它会与 client
断开连接。
我的问题是,当socket
已关闭或已断开连接。
我不想在 server
电源故障后再次重新启动我的 client application
。
最佳答案
在没有数据交换并且没有在套接字上设置 TCP keep-alive 选项的情况下,套接字将不知道远程连接突然消失。这不是什么新鲜事,这是一个众所周知的套接字设计问题。
一般模式是在客户端和服务器之间发送“我还在这里”消息的套接字上有某种保持 Activity 或 ping 协议(protocol),这样两个端点都知道另一端没有消失。当端点离线时,远程套接字将在后续的 recv\send 调用中失败(或抛出异常)。因此,应用程序或服务器可以处理它认为合适的断开连接。但这对移动设备提出了一个有趣的挑战 - 频繁的网络消息可能会因为保持 radio 打开而耗尽电池电量。
包括 Android 在内的移动设备通常不会与服务保持长时间运行的套接字连接。相反,客户端将“按需连接”并在完成后关闭套接字。同样,如果服务器需要向设备发送某些内容,它通常会使用平台的“推送”通知服务。在 Android 上,当前的推送通知服务是 FCM .客户端向 FCM 和服务器注册。当服务器有新东西要给客户端时,它会通过 FCM 发送推送通知。反过来,客户端应用程序获取通知消息作为有新内容可用的唤醒,然后重新连接到服务器以获取实际消息。最好的例子是移动设备上的电子邮件。
关于java - 服务器断电后如何从Android客户端重新连接套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40782240/