客户端:

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();
                }
            }
        }
    }
}

C#客户端和服务端数据的同步传输 (转载)的更多相关文章

  1. C# TCP实现多个客户端与服务端 数据 与 文件的传输

    C#菜鸟做这个东东竟然花了快三天的时间了,真是菜,菜,菜--- 下面是我用C#写的 一个简单的TCP通信,主要的功能有: (1) 多个客户端与服务器间的数据交流 (2)可以实现群发的功能 (3)客户端 ...

  2. [通信] C# TCP实现多个客户端与服务端 数据 与 文件的传输

    说明: http://download.csdn.net/detail/chwei_cson/4423874 源码: http://download.csdn.net/download/meicanj ...

  3. TCP学习之三:客户端、服务端同步传输字符串

    参考学习张子阳大神的博客:http://www.cnblogs.com/JimmyZhang/category/101698.html 一个客户端.发送一条消息 客户端: 服务端: 注意:Networ ...

  4. 客户端获取服务端自定义类数据 z

    客户端获取服务端自定义类数据 问题一:超时问题,在最后获取数据的时候突然提示服务超时,服务已断开 解决:配置文件添加: <bindings> <wsHttpBinding> & ...

  5. [SignalR]SignalR与WCF双工模式结合实现服务端数据直推浏览器端

    原文:[SignalR]SignalR与WCF双工模式结合实现服务端数据直推浏览器端 之前开发基于WinForm监控的软件,服务端基于Wcf实现,里面涉及双工模式,在客户端里面,采用心跳包机制保持与服 ...

  6. [Java]Hessian客户端和服务端代码例子

    简要说明:这是一个比较简单的hessian客户端和服务端,主要实现从客户端发送指定的数据量到服务端,然后服务端在将接收到的数据原封不动返回到客户端.设计该hessian客户端和服务端的初衷是为了做一个 ...

  7. SignalR 实现web浏览器客户端与服务端的推送功能

    SignalR 是一个集成的客户端与服务器库,基于浏览器的客户端和基于 ASP.NET 的服务器组件可以借助它来进行双向多步对话. 换句话说,该对话可不受限制地进行单个无状态请求/响应数据交换:它将继 ...

  8. Fresco 源码分析(二) Fresco客户端与服务端交互(3) 前后台打通

    4.2.1.2.4 PipelineDraweeControllerBuilder.obtainController()源码分析 续 上节中我们提到两个核心的步骤 obtainDataSourceSu ...

  9. Fresco 源码分析(二) Fresco客户端与服务端交互(1) 解决遗留的Q1问题

    4.2 Fresco客户端与服务端的交互(一) 解决Q1问题 从这篇博客开始,我们开始讨论客户端与服务端是如何交互的,这个交互的入口,我们从Q1问题入手(博客按照这样的问题入手,是因为当时我也是从这里 ...

随机推荐

  1. 1、编写一个简单Makefile模板

    一.Makefile简介 一个工程中的源文件不计其数,其按类型.功能.模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译, ...

  2. 微信小程序自运营器 微信小程序自动运营器(让你的微信小程序,公众号零运营成本,24小时全自动运营)

    自动发单,自动评价,自动评论,自动推广 微信小程序自运营器  微信小程序自动运营器(让你的微信小程序,公众号零运营成本,24小时全自动运营) 我们会根据你的微信公众号或微信小程序定制开发带有一定AI智 ...

  3. element-ui 点击获取table的行索引

    <el-table :data="list" v-loading.body="listLoading" element-loading-text=&quo ...

  4. YARN简述

    YARN(Yet Another Resource Negotiator)是Hadoop的集群资源管理系统.YARN提供请求和使用集群资源的API,但这些API很少直接用于用户代码.相反,用户代码中用 ...

  5. 使用命令行执行jmeter的方法

    1. 简介 使用非 GUI 模式,即命令行模式运行 JMeter 测试脚本能够大大缩减所需要的系统资 本文介绍windows下以命令行模式运行的方法. 1.1. 命令介绍 jmeter -n -t & ...

  6. Python绘图的颜色设置

    (转载):Python中的matplotlib函数中的颜色选取 转载链接:https://www.cnblogs.com/darkknightzh/p/6117528.html 原文内容:完全出自于自 ...

  7. airflow整体架构

    run命令运行过程 读取dag文件生成task依赖关系,然后生成封装airflow run的command命令,通过celery发送到executor端,重新执行该airflow run命令. sch ...

  8. Egret飞行模拟-开发记录02

    1.Egret异步加载资源制作loading界面 使用EUI,EXML组件制作loading界面时,需要皮肤主题资源加载控制.即default.thm.json配置文件. 下一篇专门记录这部分. 2. ...

  9. windows2008 apache2.4 tomcat-7多域名绑定环境配置

    =====================软件清单Apache2.4.33apache-tomcat-7.0.85===================== 1.安装apache    1.1下载ap ...

  10. jail-break-rule

    switchOmega plugin for firefox and chrome https://raw.githubusercontent.com/gfwlist/gfwlist/master/g ...