EasyModbus:断开网络连接不会改变连接状态
EasyModbus: disconnecting from network doesn't change the connection state
在 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;
}
然后在我的应用程序的其他部分,我尝试 read/write 仅当客户端仍处于连接状态时:
if (client.Connected)
{
try
{
int[] readHoldingRegisters = client.ReadHoldingRegisters(1000, 10);
// do something
}
catch (Exception)
{
throw;
}
}
如果在应用程序处于 运行 时我将我的笔记本电脑与 WiFi 网络断开连接,Connected
属性 即使过了很长时间仍然 true
。当我尝试读取寄存器时出现 "out of range" 异常,但我想知道为什么 属性 没有立即转向 false
。至少,当我尝试 read/write 某些东西时,我会期待 "timeout" 异常。
有没有更好的方法来知道服务器不再可达?
如果服务器只是简单地断开连接而没有关闭连接,实际上是不可能检测到连接丢失的。那么Connected
属性还是true
。
也许 Available
方法会有所帮助。该方法只是简单地轮询服务器是否还活着。
在 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;
}
然后在我的应用程序的其他部分,我尝试 read/write 仅当客户端仍处于连接状态时:
if (client.Connected)
{
try
{
int[] readHoldingRegisters = client.ReadHoldingRegisters(1000, 10);
// do something
}
catch (Exception)
{
throw;
}
}
如果在应用程序处于 运行 时我将我的笔记本电脑与 WiFi 网络断开连接,Connected
属性 即使过了很长时间仍然 true
。当我尝试读取寄存器时出现 "out of range" 异常,但我想知道为什么 属性 没有立即转向 false
。至少,当我尝试 read/write 某些东西时,我会期待 "timeout" 异常。
有没有更好的方法来知道服务器不再可达?
如果服务器只是简单地断开连接而没有关闭连接,实际上是不可能检测到连接丢失的。那么Connected
属性还是true
。
也许 Available
方法会有所帮助。该方法只是简单地轮询服务器是否还活着。