代码篇C#网络编程之tcp同步客户端

来源:互联网 发布:吉诺比利十大诡异数据 编辑:程序博客网 时间:2024/05/16 01:34
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;using System.Net;using System.Net.Sockets;using System.Threading;namespace _003_同步tcp客户端{    public partial class Form1 : Form    {        //---定义        private delegate void ShowReceiveMessageCallBack(string text);         //---声明一个委托        private ShowReceiveMessageCallBack showReceiveMessageCallBack;        //----操作进度条委托        private delegate void SetProgressBarValueCallBack();        //----        private SetProgressBarValueCallBack setProgressBarValueCallBack;        private TcpClient myTcpclient;  //--tcp 客户端        private NetworkStream networkstream;       //---网络数据流        private Thread ReceiveMessageThread;       //--接受消息线程        public Form1()        {            InitializeComponent();        }        private void Form1_Load(object sender, EventArgs e)        {            //---初始化回调            showReceiveMessageCallBack = new ShowReceiveMessageCallBack(AddMessageToList);             // ---初始化            setProgressBarValueCallBack = new SetProgressBarValueCallBack(SetProgreassBarValue);            textbox_serverIP.Text = "127.0.0.1";            textbox_serverPort.Text = "5788";            textbox_sendMessage.Text = "blue, 你好";        }        //---建立连接单击事件        private void btn_connect_Click(object sender, EventArgs e)        {            //--创建实例化IP终结点            //--传入的是服务器IP + 端口            IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Parse(textbox_serverIP.Text), Convert.ToInt32(textbox_serverPort.Text));            //--实例化TCP客户端            myTcpclient = new TcpClient();            //--异常 处理            try            {                //--发起TCP连接                myTcpclient.Connect(ipEndPoint);                //--获取网络数据流                networkstream = myTcpclient.GetStream();                //---实例化接收消息线程                ReceiveMessageThread = new Thread(ReceiveMessage);                //--启动线程                ReceiveMessageThread.Start();            }            catch (Exception ex)            {                MessageBox.Show(ex.Message);            }        }        //--创建线程--等待服务器消息到来        private void ReceiveMessage()        {            while (true)            {                try                {                    byte[] receiveData = new byte[1024];  ///---字节                    networkstream.Read(receiveData, 0, receiveData.Length);                    //--转换为字符串格式--默认编码为ANSC||                    string msg = Encoding.Default.GetString(receiveData);                    //---将消息放到消息列表中                    listbox_receiveMessage.Invoke(showReceiveMessageCallBack, msg);                    //--设置进度条的值的回调函数                    progressbar_progressBar.Invoke(setProgressBarValueCallBack);                }                catch(ThreadAbortException)                {                }                catch (Exception ex)                {                    MessageBox.Show(ex.Message);                    //--释放相关系统资源---释放TCP连接                    if (null != networkstream)                    {                        networkstream.Dispose();                    }                    break;                }            }        }        //---添加接受消息到列表的委托的方法        private void AddMessageToList(string text)        {            listbox_receiveMessage.Items.Add(text);        }        //--发送消息        private void btn_sendMessage_Click(object sender, EventArgs e)        {            byte[] sendData;// = new byte[1024];            sendData = Encoding.Default.GetBytes(textbox_sendMessage.Text);            networkstream.Read(sendData, 0, sendData.Length);        }        //---断开连接单击事件        private void btn_disconnect_Click(object sender, EventArgs e)        {            //--销毁TCP客户端和网络数据流即可            myTcpclient.Close();            networkstream.Dispose();            //--终止线程的调用            ReceiveMessageThread.Abort();        }        ///--设置进度条的委托的方法        private void SetProgreassBarValue()        {            if (progressbar_progressBar.Value < progressbar_progressBar.Maximum)            {                progressbar_progressBar.Value++;            }            else            {                progressbar_progressBar.Value = 0;            }        }    }}

0 0
原创粉丝点击