客户端:

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. Linux中安装nodejs及插件

    Linux中安装nodejs及插件 1.去官网下载安装包 英文网址:https://nodejs.org/en/download/ 中文网址:http://nodejs.cn/download/ 通过 ...

  2. PHP中的traits快速入门

    traits 在学习PHP的过程中,我们经常会翻阅PHP的官方手册.一般理解能力强悍的人多阅读几遍便可轻松理解其中要领,但往往更多的初学者对官方文档中寥寥数语的描述难以理解.作为一个曾有同样困扰的人, ...

  3. Mybatis中 Integer 值为0时,默认为空字符串的解决办法。

    需求是查询级别为0的用户 User对象里的level字段的值为0,查询时居然没有查到为level为0的用户. <select id="selectSelective" par ...

  4. Spring编程式事务管理和声明式事务管理

    本来想写一篇随笔记一下呢,结果发现一篇文章写的很好了,已经没有再重复写的必要了. https://www.ibm.com/developerworks/cn/education/opensource/ ...

  5. 分布式job-任务调度(一)

    什么是任务调度: 任务调度:在单位时间内,去调用某个方法或者执行某段代码 java实现方式: 方法一(使用线程实现): public static void ThreadTskScheduling() ...

  6. Scrapy实战篇(七)之爬取爱基金网站基金业绩数据

    本篇我们以scrapy+selelum的方式来爬取爱基金网站(http://fund.10jqka.com.cn/datacenter/jz/)的基金业绩数据. 思路:我们以http://fund.1 ...

  7. git学习手记(也许仅对本人有用)

    首先明白git的三种状态 commited已提交 =====>git仓库(存着各种版本)modified已修改(此时就是我们的编辑器中的未保存状态)====>工作目录staged暂存状态= ...

  8. yum搭建 Lamp环境

    yum搭建Lamp yum install -y httpd yum install -y nano rpm 安装 Php7 相应的 yum源 rpm -Uvh https://dl.fedorapr ...

  9. 种类并查集(洛谷P2024食物链)

    题目描述 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A 吃 B,B 吃 C,C 吃 A. 现有 N 个动物,以 1 - N 编号.每个动物都是 A,B,C 中的一种,但是我 ...

  10. CentOS7怎么更换yum源

    163yum源:1)备份当前yum源防止出现意外还可以还原回来cd /etc/yum.repos.d/cp /CentOS-Base.repo /CentOS-Base-repo.bak2)使用wge ...