C#开发的TCP client通讯界面

来源:互联网 发布:人工智能ai开发语言 编辑:程序博客网 时间:2024/05/16 08:14

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 

0 0
原创粉丝点击