C#:检查套接字是否与服务器有活动连接?

时间:2018-04-06 13:51:29

标签: c# .net

我正试图找到一个合法的wya来判断套接字是否与服务器有连接。如果它们尚未连接,或者客户端或服务器已将其关闭,则会变为无效。

在使用此套接字对象连接到服务器之前,此方法当前返回null。任何人都可以向我解释为什么会这样做,以及我如何解决它?

private static bool IsConnected(Socket socket)
{
    return !(socket.Poll(1, SelectMode.SelectRead) && socket.Available == 0);
}

1 个答案:

答案 0 :(得分:2)

知道套接字是否有效的唯一方式是发送内容并获取回复。其他方式都是谎言。 public String Setphase2(Button r,Button l,TextView t,EditText i) { i.setText(""); // See this line************** r.setText(R.string.upload); l.setText(R.string.edit); t.setText(R.string.key_task); String inputText = i.getText().toString(); Log.d("UserText", "Entry text is:" + inputText); i.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD); return inputText; } 仅告诉您当前读缓冲区中是否有数据。状态是......至多不可靠。套接字可以在没有OS注意的情况下死掉。套接字可以被网络硬件人为地欺骗为“活着” - 试图阻止临时网络闪烁(特别是对于wifi或移动用户)切断所有套接字;但有时该设备永远不会回来,并且中间的设备没有注意到。这意味着即使TCP级别的套接字检测也不可靠

所以:发送一些测试信息然后回复一下。这是唯一方式。