我需要在局域网内通过网线和多个设备建立modbustcp通信。当我试着用tcpclient实现断线重连功能时,一直存在问题。以下是我的代码:
public bool Connect()
{
if (IsConnected)
{
return true;
}
_modbusFactory = new ModbusFactory();
_tcpClient = new TcpClient();
try
{
var result = _tcpClient.BeginConnect(IpAddress, Port, null, null);
var success = result.AsyncWaitHandle.WaitOne(TimeSpan.FromMilliseconds(1000));
if (!success)
{
Debug.WriteLine(DateTime.Now + " 连接失败!");
_tcpClient.Close();
_tcpClient.EndConnect(result);
return false;
}
_tcpClient.EndConnect(result);
_master = _modbusFactory.CreateMaster(_tcpClient);
_master.Transport.ReadTimeout = 500;
_master.Transport.Retries = 3;
return true;
}
catch (Exception ex)
{
Debug.WriteLine("连接异常!");
_tcpClient.Close();
IsConnected = false;
return false;
}
}
在我的代码中,如果电脑不连接任何网络,变量success就会返回true,这和我的预期不符。我想,是不是有更好的方式来断线重连的功能呢?
BeginConnect 有回调啊,在回调里处理啊。
AsyncWaitHandle这里没啥使用的意义。
hslcommunication 百度搜索一下,现成的库