c# tcp客户端和服务端,断线重连

服务端


 public class TcpServer
    {
        private TcpListener _tcpServer = null;
        private NetworkStream _stream = null;
        private StreamReader _sr = null;
        private TcpClient _tcpClient = null;
        public Action<string> ReciviMsgAction { get; set; }
        private bool isConnected = false;
        /// <summary>
        /// 开启监听
        /// </summary>
        public bool StartListener()
        {
            IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
            _tcpServer = new TcpListener(ipAddress, 1233);
            _tcpServer.Start();
            _tcpClient = _tcpServer.AcceptTcpClient();        //接收挂起的连接请求
            isConnected = true;
            Task.Run(ReceiveMsg);
            Task.Run(CheckIsConntect);
            
            return true;

        }

        /// <summary>
        /// 接收消息
        /// </summary>
        public void ReceiveMsg()
        {
            try
            {
                while (true)
                {
                    if (isConnected)
                    {
                        _stream = _tcpClient.GetStream();
                        _sr = new StreamReader(_stream);
                        byte[] data = new byte[1024];
                        int bytesRead = _stream.Read(data, 0, data.Length);
                        string message = Encoding.ASCII.GetString(data, 0, bytesRead);
                        ReciviMsgAction.Invoke(message);
                        Thread.Sleep(1000);
                    }


                }
            }
            catch (Exception)
            {
                ReciviMsgAction.Invoke("客户端掉线");
                isConnected = false;
            }




        }

        /// <summary>
        /// 发送数据
        /// </summary>
        /// <param name="msg"></param>
        public void SendMsg(string msg)
        {
            if (!isConnected)
            {
                ReciviMsgAction.Invoke("发送失败,客户端掉线");
                return;
            }
            byte[] reply = Encoding.ASCII.GetBytes(msg);
            _stream.Write(reply, 0, reply.Length);

        }

        /// <summary>
        /// 检测客户端是都断联
        /// </summary>
        public void CheckIsConntect()
        {
            while (true)
            {
                if (!isConnected)
                {
                    //IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
                    //_tcpServer = new TcpListener(ipAddress, 1233);
                    _tcpServer.Start();
                    _tcpClient = _tcpServer.AcceptTcpClient();        //接收挂起的连接请求
                    isConnected = true;
                    ReciviMsgAction.Invoke("客户端重新连接");
                    Task.Run(ReceiveMsg);
                }
                Thread.Sleep(1000);
            }


        }
    }

客户端

 public class TcpClientServer
    {
        private IPAddress ipAddress = null;
        private TcpClient _client = null;
        private NetworkStream _stream = null;
        public Action<string> ReciviMsgAction { get; set; }
        public TcpClientServer()
        {
            ipAddress = IPAddress.Parse("127.0.0.1");
            _client = new TcpClient();
            _client.Connect(ipAddress, 1233);
            _stream = _client.GetStream();
            Task.Run(ReceiveMsg);
        }

        /// <summary>
        /// 发送
        /// </summary>
        public void SendMsg(string msg)
        {
            byte[] data = Encoding.ASCII.GetBytes(msg);
            _stream.Write(data, 0, data.Length);

        }

        /// <summary>
        /// 接收消息
        /// </summary>
        /// <param name="msg"></param>
        public void ReceiveMsg()
        {
            try
            {
                while (true)
                {
                    byte[] data = new byte[1024];
                    int bytesRead = _stream.Read(data, 0, data.Length);
                    string message = Encoding.ASCII.GetString(data, 0, bytesRead);
                    ReciviMsgAction.Invoke(message);
                    Thread.Sleep(1000);
                }
            }
            catch (Exception ex)
            {
                ReciviMsgAction.Invoke("服务端关闭");
            }

        }
    }

当然以上客户端的断线 报异常的时候需要重新判断 异常类型,上面是由错误的但是目前是可以实现的。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: c是英文字母表中的第三个字母。它的发音类似于音标/si:/或/si/. 在拼写和发音上,它与其他字母相比较简单。 在英语中,c通常与元音字母a, o和u结合时发/k/的音,例如cat(猫),dog(狗)和cup(杯子)。然而,当c与元音字母e和i结合时,则发/s/的音,例如cent(分),city(城市)和circle(圆)。c也可以在某些情况下作为辅音字母发/k/音,例如car(汽车)和cold(冷的)。 在不发音上, c 可以用作数学中的变量或表示速度的单位之一,例如光速(speed of light)。 在计算机科学中,C 是一种流行的编程语言。它是一种结构化和高级的编程语言,由Dennis Ritchie在20世纪70年代开发。C语言被广泛用于操作系统,编译器和嵌入式系统等领域,具有高效性和灵活性。 此外,C也代表着一种平均评级。在学校和大学的等级制度中,C是一个中等水平的评级,代表“合格”或“一般水平”。学生通常希望获得更好的评级,如A(优秀)或B(良好),而不是C。 总结来说,c是英文字母表中的一个字母,它在拼写和发音上具有一些规则。它还可以指代C编程语言和某种评级制度中的一种中等水平。 ### 回答2: “c”是英文字母表中的第三个字母,它是一个辅音字母。在英语中,它的发音是/k/。此外,它也用作罗马数字中的数字100,代表拉丁语中的“centum”,意为100。在数学和科学中,它常用作代表某个常数或变量。例如,在物理学中,它代表光速,约等于每秒30万公里。在化学中,它可以代表摄氏度(Celsius)或是碳元素(Carbon)。在计算机编程中,它也是一种编程语言,C语言,在计算机领域广泛应用。C语言的设计简单而灵活,容易学习和使用,在软件开发中有着重要的地位。此外,C还是一个音乐学术语,在音乐表示法中,它是一个音符,代表中音(middle C),也称为C4,具体频率为约262赫兹。总之,字母“c”在不同领域中有着不同的用途和含义,是一个多功能的字母。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小盆友你是否很有多问号

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值