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

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值