客户端:

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. go 语言之 生产者消费模型

    简易的生产者消费模型,通过管道[也可以理解为队列],管道是先进先出,主要是理解chan 生产者使用make将chan初始化,并且设置chan长度,如果不设置,生产者就写入不了通道 go 是使用线程开始 ...

  2. 关于eth0 eth0:1 和eth0.1关系介绍

    eth0 eth0:1 和eth0.1三者的关系对应于物理网卡.子网卡.虚拟VLAN网卡的关系:物理网卡:物理网卡这里指的是服务器上实际的网络接口设备,这里我服务器上双网卡,在系统中看到的2个物理网卡 ...

  3. spring boot项目中处理Schedule定时任务

    项目中,因为使用了第三方支付(支付宝和微信支付),支付完毕后,第三方支付平台一般会采用异步回调通知的方式,通知商户支付结果,然后商户根据通知内容,变更商户项目支付订单的状态.一般来说,为了防止商户项目 ...

  4. 根据导出的查询结果拼接字符串,生成sql语句并保存到txt文件中

    import os os.chdir("C:/") path = os.getcwd() print(path) f = open("sql.csv") # p ...

  5. [STM32F103]RTC日历

    使能PWR和BKP时钟: a) RCC_APB1PeriphClockCmd(); 使能后备寄存器访问: a) PWR_BackupAccessCmd(); 配置RTC时钟源,使能RTC时钟: a)  ...

  6. MySQL计算年龄

    SELECT TIMESTAMPDIFF(YEAR, birthday, now()) FROM person2;

  7. 0008 合并K个排序链表

    合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [   1->4->5,   1->3->4,   2->6 ] 输出: 1-&g ...

  8. 根据URL地址获取对应的HTML,根据对应的URL下载图片

    核心代码(获取HTML): #region 根据URL地址获取信息GET public static String GetResult(string url) { return GetResult(u ...

  9. 2018-2019-2 20165205 Exp2 后门原理与实践

    20165205 Exp2 后门原理与实践 实验内容 一.基础问题回答 列举你能想到的一个后门进入到你系统中的可能方式 下载盗版软件.操作系统 当然正版软件里可能也有编写者安装的后门 不在官方更新软件 ...

  10. mongo 索引 安全、备份与恢复

    一.索引 创建大量数据 for(i=0;i<100000;i++){ db.t1.insert({name:"test"+i,age:i}) } 数据查找性能分析 db.t1 ...