C#客户端和服务端数据的同步传输

 

客户端:

 

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 TCP同步客户端2014_12_15
{
    public partial class Form1 : Form
    {
        private TcpClient myTcpClient;// 我的客户端
        private NetworkStream networdStream;// 网络数据流
        private delegate void ShowRecivieMsgCallBack(string text);
        private ShowRecivieMsgCallBack showRecivieMsgCallBack;
        private delegate void SetProgressBarCallBack();
        private SetProgressBarCallBack setProgressBarCallBack;
        private Thread ReceiveMsgThread;//接收消息线程
        public Form1()
        {
            InitializeComponent();
        }
        // 在窗体加载的时候启动
        private void Form1_Load(object sender, EventArgs e)
        {
            //初始化回调
            showRecivieMsgCallBack = new ShowRecivieMsgCallBack(ReceiveMsgtoList);
            setProgressBarCallBack = new SetProgressBarCallBack(setProgressBar);
        }
        //建立连接
        private void btnConnect_Click(object sender, EventArgs e)
        {
            //创建实例化IP终结点
            IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Parse(txtServerIp.Text),Convert.ToInt32(txtServerPort.Text));
            //创建实例化TCP客户端
            myTcpClient = new TcpClient();
            try
            {
                //建立TCP连接
                myTcpClient.Connect(ipEndPoint);
                //实例化网络数据流
                networdStream = myTcpClient.GetStream();
                //接收消息
                ReceiveMsgThread = new Thread(ReceiveMsg);
                ReceiveMsgThread.Start();

            }
                catch(ThreadAbortException)
            {
               
                }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

        }
        //发送消息
        private void btnSendMsg_Click(object sender, EventArgs e)
        {
            byte[] sendMsg;
            sendMsg = Encoding.Default.GetBytes(tbSendMsg.Text);
                networdStream.Write(sendMsg, 0,sendMsg.Length);

        }
        //断开连接
        private void btnDisConnect_Click(object sender, EventArgs e)
        {
            //关闭相关的实例化对象
            myTcpClient.Close();
            networdStream.Dispose();
            // 终端线程
            ReceiveMsgThread.Abort();
        }

        //接收消息线程
        private void ReceiveMsg()
        {
            while (true)
            {
                try
                {
                  //获得数据
                    byte[] getDate = new byte[1024];
                    networdStream.Read(getDate,0,getDate.Length);
                    // 转化格式
                    string msg = Encoding.Default.GetString(getDate);
                    //将受到的消息放在列表中
                    lstRecevieMsg.Invoke(showRecivieMsgCallBack,msg);
                    pgProgressBar.Invoke(setProgressBarCallBack);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                    if (networdStream != null)
                    {
                        networdStream.Dispose();
                    }
                    break;
                }
            }
       
        }
        //接收消息的方法
        private void ReceiveMsgtoList(string text)
        {
            lstRecevieMsg.Items.Add(text);
        }
        private void setProgressBar()
        {
            if (pgProgressBar.Value < pgProgressBar.Maximum)
            {
                pgProgressBar.Value++;
            }
            else
            {
                pgProgressBar.Value = 0;
            }
        }
    }
}

 

 

服务端:

 

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;
using System.IO;
namespace TCP异步编程2014_12_15
{
    public partial class Form1 : Form
    {
        private TcpListener myTcpListener;
        private Thread AccessMsgThread;
        private TcpClient myTcpClient;
        private NetworkStream ns;
        private string path;
        private delegate void ShowMgsCallBack(string text);
        private ShowMgsCallBack showMgsCallBack;
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            showMgsCallBack = new ShowMgsCallBack(showMsg);
        }
        private void showMsg(string text)
        {
            lstRecevieMsg.Items.Add(text);
        }
        //开始监听的单击事件
        private void btnEndListen_Click(object sender, EventArgs e)
        {
            try
            {
                IPEndPoint ipendPoint = new IPEndPoint(IPAddress.Parse(txtServerIp.Text), Convert.ToInt32(txtServerPort.Text));
                myTcpListener = new TcpListener(ipendPoint);
                myTcpListener.Start();
                AccessMsgThread = new Thread(AccessMsg);
                AccessMsgThread.Start();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

        }
        //结束监听的单击事件
        private void btnBeginListen_Click(object sender, EventArgs e)
        {
            myTcpListener.Stop();
            AccessMsgThread.Abort();
        }

        private void AccessMsg()
        {
            try
            {
                myTcpClient = myTcpListener.AcceptTcpClient();
                ns = myTcpClient.GetStream();
                while (true)
                {
                    int readLen = myTcpClient.Available;
                    if (readLen > 0)
                    {
                        //string path;
                       // System.IO.Directory.CreateDirectory(path);
                        //DirectoryInfo dir = new DirectoryInfo(path);
                      //  dir.Create();//自行判断一下是否存在。
                      
                       byte[] getDate=new byte[1024];
                        ns.Read(getDate,0,getDate.Length);
                        string getMsg=Encoding.Default.GetString(getDate);
                        lstRecevieMsg.Invoke(showMgsCallBack,getMsg);
                        Thread.Sleep(50);
                        ns.Write(getDate, 0, getDate.Length);
                    }
                }

            }
                catch(ThreadAbortException)
            {
               
            }
            catch(Exception e)
            {
                MessageBox.Show(e.Message);
                if (ns != null)
                {
                    ns.Dispose();
                }
                if (myTcpClient != null)
                {
                    myTcpClient.Close();
                }
            }
        }
    }
}

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员阿卢

谢谢鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值