EasyModbus:断开网络连接不会更改连接状态

时间:2018-09-28 13:04:24

标签: c# exception-handling network-programming modbus-tcp

在C#应用程序中,我使用EasyModbus连接到远程服务器:

ModbusClient client = new ModbusClient()
{
    IPAddress = "192.168.1.100",
    Port = 502,
    ConnectionTimeout = 200
}

try
{
    client.Connect();
}
catch (EasyModbus.Exceptions.ConnectionException)
{
    throw;
}
catch (System.Net.Sockets.SocketException)
{
    throw;
}

然后在我的应用程序的其他部分中,仅当客户端仍处于连接状态时,我才尝试读取/写入:

if (client.Connected)
{
    try
    {
        int[] readHoldingRegisters = client.ReadHoldingRegisters(1000, 10);
        // do something
    }
    catch (Exception)
    {
        throw;
    }
}

如果在应用程序运行时我断开了笔记本电脑与WiFi网络的连接,即使经过很长时间,Connected属性仍为true。尝试读取寄存器时,出现“超出范围”异常,但是我想知道为什么该属性不会立即变为false。至少,当我尝试读取/写入内容时,我会期望出现“超时”异常。

是否有更好的方法来知道服务器不再可用?

1 个答案:

答案 0 :(得分:1)

如果仅在不关闭连接的情况下断开服务器连接,则实际上无法检测到连接丢失。然后,Connected属性仍然是true

也许Available方法可能会有所帮助。如果服务器仍然处于活动状态,该方法只会轮询服务器。