同步TCP客户端

来源:互联网 发布:淘宝售后技巧 编辑:程序博客网 时间:2024/06/06 05:52

同步TCP客户端

1:声明TcpClient链接

2:声明网络数据流(NetworkStream

3:实例化IP终结点(IPEndPoint

4:实例化客户端(TcpClient

5:发起TCP链接(链接3和4,Connect)

6:获取绑定的数据流(链接2和4,ns = myTcpClient.GetStream();)

7:需要发送的消息传入数据流(ns.Write(sendData,0,sendData.Length);)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Threading;


namespace _003_同步TCP客户端
{
    public partial class frmMain : Form
    {
        private delegate void ShowReceiveMsgCallBack(string text);
        private ShowReceiveMsgCallBack showReceiveMsgCallBack;


        private delegate void SetProgressBarCallBack();
        private SetProgressBarCallBack setProgressBarCallBack;


        private TcpClient myTcpClient;
        private NetworkStream ns;//网络数据流
        private Thread ReceiveMsgThread;
        public frmMain()
        {
            InitializeComponent();
        }


        private void label3_Click(object sender, EventArgs e)
        {


        }
        //窗体启动加载事件
        private void frmMain_Load(object sender, EventArgs e)
        {
            showReceiveMsgCallBack = new ShowReceiveMsgCallBack(AddMsgToList);


            setProgressBarCallBack = new SetProgressBarCallBack(SetProgressBarValue);
            
        }
        //建立连接按钮
        private void btnConnect_Click(object sender, EventArgs e)
        {
            //创建并实例化IP终结点
            IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Parse(txtServerIP.Text), Convert.ToInt16(txtServerPort.Text));
            //实例化TCP客户端
            myTcpClient = new TcpClient();


            try
            {
                //发起tcp链接
                myTcpClient.Connect(ipEndPoint);
                //获取绑定的数据流
                ns = myTcpClient.GetStream();


                ReceiveMsgThread = new Thread(ReceiveMsg);
                ReceiveMsgThread.Start();


            }
            catch (Exception ex)
            {


                MessageBox.Show(ex.Message);




            }


        }




        //接受消息线程
        private void ReceiveMsg()
        {
            while (true)
            {
                try
                {  //获取数据
                    byte[] getData=new byte[1024];
                    ns.Read(getData,0,getData.Length);
                    //转换为字符串形式
                    string msg = Encoding.Default.GetString(getData);
                    //将收到的消息添加到列表回调
                    IstReceiveMsg.Invoke(showReceiveMsgCallBack,msg);
                    //修改进度条的值
                    pgProgressBar.Invoke(setProgressBarCallBack);
                }
                    catch(ThreadAbortException){}
                catch(Exception ex) 
                {
                    MessageBox.Show(ex.Message);
                    //释放相关资源
                    if (ns != null)
                    {
                        ns.Dispose();
                        break;
                    
                    }
                
                }
            
            
            }
        
        
        }




        private void AddMsgToList(string text)
        {
            IstReceiveMsg.Items.Add(text);
        }


        //修改进度条值得被委托的方法
        private void SetProgressBarValue()
        {
            if (pgProgressBar.Value < pgProgressBar.Maximum)
            { pgProgressBar.Value++; }
            else{


                pgProgressBar.Value = 0;
            }
        
        
        }




        private void btnSendMsg_Click(object sender, EventArgs e)
        {
            byte[] sendData;
            sendData = Encoding.Default.GetBytes(txtSendMsg.Text);
            ns.Write(sendData,0,sendData.Length);
        }


        private void btndisConnect_Click(object sender, EventArgs e)
        {
            //销毁tcp客户端和网络数据流的事例
            myTcpClient.Close();
            ns.Dispose();
            ReceiveMsgThread.Abort();
        }
    
    }
}

原创粉丝点击