Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EasyModbus:断开与网络的连接不会';不要更改连接状态_C#_Exception Handling_Network Programming_Modbus Tcp - Fatal编程技术网

C# EasyModbus:断开与网络的连接不会';不要更改连接状态

C# EasyModbus:断开与网络的连接不会';不要更改连接状态,c#,exception-handling,network-programming,modbus-tcp,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; }

在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
。至少,当我尝试读/写一些东西时,我会期望出现“超时”异常


是否有更好的方法知道服务器无法访问?

如果服务器只是断开连接而没有关闭连接,则实际上不可能检测到连接丢失。然后,
Connected
属性仍然是
true

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