首页 新闻 会员 周边

C#怎么更好地实现与局域网内设备的tcp断线重连?

0
[待解决问题]

我需要在局域网内通过网线和多个设备建立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,这和我的预期不符。我想,是不是有更好的方式来断线重连的功能呢?

临雪的主页 临雪 | 初学一级 | 园豆:106
提问于:2022-11-14 10:59
< >
分享
所有回答(2)
0

BeginConnect 有回调啊,在回调里处理啊。
AsyncWaitHandle这里没啥使用的意义。

日暮青色 | 园豆:475 (菜鸟二级) | 2022-11-15 09:31
0

hslcommunication 百度搜索一下,现成的库

百鸟朝凤 | 园豆:260 (菜鸟二级) | 2022-11-17 09:35
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册