socket通信问题

2021-01-06  本文已影响0人  108k

1、连接状态显示混乱

表现:有的断开了又显示连上,有的连上了又显示断开等

原因:查了一下,问题出在连接状态更新在另一个线程上,时间差导致的混乱。

解决:lock锁,只有在client!=null时才更新连接状态为连上。

代码:

public void Touch()

    {

      client = new BaoClient(plc.Ip, int.Parse(plc.Port));

      client.connectEvent += new Action<string>(Connected);

      client.recvMessageEvent += new Action<string>(Received);

      client.Start();

    }

    public void Break()

    {

      client.CloseClientSocket();

      lock (this)

      {

        client = null;

        IsTouched = false;

      }

    }

    void Connected(string key)

    {

      lock (this)

      {

        if (client != null)

          this.IsTouched = true;

      }

    }

上一篇 下一篇

猜你喜欢

热点阅读