我有一个名为“clientSock”的套接字。它已连接并且正在工作。

我使用线程中的循环接收数据,如下所示:

char[] inputChars = new char[1024];
int charsRead = 0;

    while (!stopNow) {

        try {

            if ((charsRead =  inputStream.read(inputChars)) != -1)
                {

                    System.out.println("Firing");
                    fire_dataRecieved(new String(inputChars, 0, charsRead)); //Fire event.
                }

            } catch (IOException e) {
                //CLIENT HAS DISCONNECTED...
                connectedClient.disconnect();
                stopNow();
            }
        }

我正在考虑通过仅向另一端发送“#KEEP-ALIVE”来发送“保持 Activity 的数据包”。

我可以使用sendStream.print("#KEEP-ALIVE")做到这一点。有更好的方法吗?如果没有,是否有一种有效的方法来检查您是否收到了数据包?或者已经存在的东西可以让您检查另一端是否还活着? clientSock.setKeepAlive(true)不适合我。我需要检查另一端是否按需存在。

最佳答案

有更好的方法吗?
如果没有,是否有一种有效的方法
检查您是否收到了小包?要么
已经存在的东西允许
您检查另一端是否
活?

如果连接出现问题,则当您发送自己的保持 Activity 数据包时,TCP堆栈会很快告诉您。它包含一种检查数据包是否以正确顺序到达的方法。

现在,如果要明确确认已收到数据包,则应让另一端发回确认。这是恕我直言的恕我直言,但这就是您必须要做的。

如果您没有在合理的延迟内得到响应(10秒就足够了),并且如果TCP堆栈没有引发某种错误,则意味着另一方的侦听方/应用程序未执行其工作。问题出在应用程序级别,而不是TCP堆栈级别。

07-25 21:34
查看更多