C# TCP/IP通信(存小问题/大体欧克)

本文档详细记录了使用C#进行TCP/IP通信的实践过程,包括上位机客户端和服务器端的实现。客户端实现了通过NetAssist网络通信助手验证通信可行性的功能,并加入了关闭连接的按钮。服务端作为通信的被动方,未添加关闭连接按钮。目前存在一些小问题,但整体通信流程已基本完成。
摘要由CSDN通过智能技术生成

上位机–客户端程序撰写部分2022/10/01
验证可行性:通过NetAssist网络通信助手(发送与接收数据🆗),本地环回地址
客户端代码中加入了关闭连接的按键(在通信中位主动方)

        #region TCP/IP 客户端

        //创建Client套接字
        Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        Thread ReceiveMsgThread;
        /// <summary>
        /// 连接服务器
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Bt_Start_Click(object sender, EventArgs e)
        {
   
            //连接服务器需要传递服务器的ip地址与端口号
            IPEndPoint point = new IPEndPoint(IPAddress.Parse(Cb_local_Ip.Text), int.Parse(Cb_local_Port.Text));
            //连接服务器
            //使用try catch 的原因:会遇到服务器端口号ip地址被占用的情况
            try
            {
   
                client.Connect(point);
            }
            catch (Exception ex)
            {
   
                MessageBox.Show("与服务器连接失败" + ex);
            }
            MessageBox.Show("与服务器连接成功");
            ReceiveMsgThread = new Thread(ReceiveMsg);
            ReceiveMsgThread.Start();
            //Task.Run(new Action(() =>
            //{
   
            //    ReceiveMsg();
            //}));

            Bt_Start.Enabled = false;
        }
        
        /// <summary>
        /// 接收消息(客户端接收服务器消息)
        /// </summary>
        /// <param name="client"></param>
        private void ReceiveMsg()
        {
   
            while (true)
            {
   
                byte[] b = new byte[1024 * 1024 * 2];
                int length = 0;
                try
                {
   
                    length = client.Receive(b);
                }
                catch
                {
   
                    MessageBox.Show("服务器断开连接");
                }
                if (length > 0)
                {
   
                    string msg = Encoding.Default.GetString(b, 0, length);
                    //将状态更新在信息栏中
                    this.BeginInvoke(new EventHandler(delegate
                    {
   
                        Tb_Msg_Show.AppendText(client + ":" + msg +"\r\n");
                    }));
                }
            }
        }
        
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值