C#开发的TCP client通讯界面

1.本文利用微软提供的TCPClient 控件以及NetworkStream 流操作的思想,花了一个周末的时间终于调试完成了TCP客户端发送和接收数据的基本通讯功能(基于ASCII码或者unicode码)。之前用c++写的时候花了一个多礼拜,本人是菜鸟水平,供各位参考!
2.由于时间有限,groupbox的重绘以及port端口自动获取等功能尚未实现。
3.TCP server部分将会在后期补上。
4.废话不多说直接上部分源码:


发送数据:

public void SendDatatoServer(string str_data)
        {
            if (isConnnectServer)
            {
                if (str_data != "")
                {
                    try
                    {
                        Byte[] sendBytes = Encoding.ASCII.GetBytes(str_data);                     
                        networkStream.Write(sendBytes, 0, sendBytes.Length);

                    }
                    catch
                    {
                        MsgWindow.Text = "SendDatatoServer Error!";
                    }

                }

            }
            
           

        }


接收数据:

public string ReceiveDatafromServer()
        {
            string returndata="未与服务器连接";
            if (isConnnectServer)
            {
                byte[] bytes = new byte[tcpClient.ReceiveBufferSize];

                try
                {
                    int BytesRead = networkStream.Read(bytes, 0, (int)tcpClient.ReceiveBufferSize);
                    returndata = Encoding.ASCII.GetString(bytes, 0, BytesRead);

                    //if (returndata == "")//
                    if (BytesRead==0)
                    {
                        receiveBlankCount++;
                        returndata = "receiveBlankCount="+receiveBlankCount.ToString();
                    }   

                    if(receiveBlankCount>receiveBlankMaxNum)
                    {
                        receiveBlankCount = 0;
                        isConnnectServer = false;
                        returndata = str_disconnect;
                    }
   
                    //returndata = Encoding.Unicode.GetString(bytes, 0, BytesRead);
                }
                catch
                {                    
                    returndata = "读取缓冲区失败,可能与服务器断开连接!";
                    isConnnectServer = false;
                }

            }
                return returndata;

        }


线程部分:(开通了线程接收数据舍弃了定时器的方式,界面不会出现卡顿的情况)

        public delegate void UpdateTxt(string received_data); //创建一个委托,为访问textbox控件TCP_ReceiveWindow
        public UpdateTxt updateTxt; //定义一个委托变量

        public void UpdateTxtMethod(string received_data)//更新控件TCP_ReceiveWindow的方法
        {
            TCP_ReceiveWindow.AppendText(received_data + "\r\n");
            TCP_ReceiveWindow.ScrollToCaret();         
        }
        //此为在非创建线程中的调用方法,其实是使用TextBox的Invoke方法。
        public void ThreadMethodTxt()
        {
            while (isConnnectServer)
            {
                this.BeginInvoke(updateTxt, ReceiveDatafromServer());
                Thread.Sleep(100);
            }
            //this.MsgWindow.Text = "与服务器断开连接!";
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            //实例化委托
            updateTxt = new UpdateTxt(UpdateTxtMethod);
        }
        private void button3_Click(object sender, EventArgs e)
        {
            if (!isConnnectServer)
            {
                ConnectServer(ServerIPInput.Text, ServerPortInput.Text);

                Thread objThread = new Thread(new ThreadStart(delegate
                {
                    ThreadMethodTxt();
                }));
                objThread.Start();
            }

            else
            {
                MsgWindow.Text = "已连接服务器,请断开后重连!";
            }

            //TCPClientReceiveThread.Start();
            //timer1.Enabled = true;
        }

参考源码:http://download.csdn.net/detail/ericwuhk/9695976

参考网址(C# 获得本机IP、端口等信息地址以及服务器IP信息):

http://254698001.blog.51cto.com/2521548/768124/ 


最终界面如下:


调试工具助手:

http://download.csdn.net/download/ericwuhk/9634094 

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值