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
    评论
非常好用的C#.net的TCP控件,this.vmTcpIpServer1.Collapse = false; this.vmTcpIpServer1.EnableLog = false; this.vmTcpIpServer1.IdleTime = -1; this.vmTcpIpServer1.LocalUsingIpAddr = "127.0.0.1"; this.vmTcpIpServer1.Location = new System.Drawing.Point(9, 17); this.vmTcpIpServer1.LogFilePath = "D:\\AppLog"; this.vmTcpIpServer1.MaxLogShownLines = 30; this.vmTcpIpServer1.Name = "vmTcpIpServer1"; this.vmTcpIpServer1.PackageHeader = UNYC.TcpIp.PackageHeader.None; this.vmTcpIpServer1.PackageTailer = UNYC.TcpIp.PackageTailer.None; this.vmTcpIpServer1.PortNum = 30000; this.vmTcpIpServer1.SaveToLogFile = false; this.vmTcpIpServer1.ShowTransContents = false; this.vmTcpIpServer1.Size = new System.Drawing.Size(266, 405); this.vmTcpIpServer1.TabIndex = 0; // // vmTcpIpClient1 // this.vmTcpIpClient1.AutoRecover = false; this.vmTcpIpClient1.Collapse = false; this.vmTcpIpClient1.ConnRetries = -1; this.vmTcpIpClient1.EnableLog = false; this.vmTcpIpClient1.IdleTime = -1; this.vmTcpIpClient1.IpAddr = "192.168.100.231"; this.vmTcpIpClient1.Location = new System.Drawing.Point(311, 17); this.vmTcpIpClient1.LogFilePath = "D:\\AppLog"; this.vmTcpIpClient1.MaxLogShownLines = 100; this.vmTcpIpClient1.Name = "vmTcpIpClient1"; this.vmTcpIpClient1.PackageHeader = UNYC.TcpIp.PackageHeader.None; this.vmTcpIpClient1.PackageTailer = UNYC.TcpIp.PackageTailer.None; this.vmTcpIpClient1.PingInterval = 500; this.vmTcpIpClient1.PortNum = 912815; this.vmTcpIpClient1.SaveToLogFile = false; this.vmTcpIpClient1.ShowTransContents = false; this.vmTcpIpClient1.Size = new System.Drawing.Size(266, 405);

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值