gpt4 book ai didi

c# - 我的 IsConnected 总是返回 true

转载 作者:太空宇宙 更新时间:2023-11-03 22:27:35 26 4
gpt4 key购买 nike

测试用例:

  1. 在连接开始之前它应该返回false
  2. 连接被另一端关闭返回false
  3. 连接被客户端关闭返回false
  4. 即使没有可用数据也存在连接 return true

    class MyConnection
    {
    //Assume I have all initialization for _socket
    public bool IsConnected()
    {
    return !(_socket.Poll(1, SelectMode.SelectRead)
    && _socket.Available == 0);
    }
    private Socket _socket;

    class Test
    {
    static void Main(string[] args)
    {
    MyConnection my = new MyConnection()
    if(my.IsConnected())
    /*always return true even when I am not connected*/;
    }
    }

有什么办法可以防止这种情况发生吗?


到目前为止,没有一个答案是令人满意的......

可以做到以下几点:

   public bool IsConnected()
{

bool bConnected = false;
bool bState = _socket.Poll(1, SelectMode.SelectRead);
try
{
if (bState && (_socket.Available == 0))
bConnected = false;
else
bConnected = true;
}
catch (SocketException)
{
//_socket.Available can throw an exception
bConnected = false;
}

return bConnected;
}

最佳答案

我认为您的 _socket.Poll() 调用是倒退的。如果轮询失败,这将有助于该方法评估为 true 而不是 false。试试这个:

public bool IsConnected()
{
return !(!_socket.Poll(1, SelectMode.SelectRead)
&& _socket.Available == 0);

}

我也不确定将 _socket.Available 作为检查的一部分是不是一个好主意。根据documentation ,返回值 0 仅表示“网络缓冲区中没有数据排队”。即使对于连接的套接字,这也很容易成为现实。

关于c# - 我的 IsConnected 总是返回 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/743895/

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