客户端:

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. 京东饭粒捡漏V1.1.0

    20180624 更新 V1.1.01.解决进程残留问题:2.加入急速下单模式: 功能介绍1.京东商城专用,支持饭粒模式下单,自己获得京豆返利 2.捡漏模式:帮助用户监控抢购商品,有库存的时候进行抢单 ...

  2. 解决github下载速度慢的问题 ,亲测有效

    原文链接 https://blog.csdn.net/tsq292978891/article/details/78260066 解决办法: 手动更改hosts 关于hosts的作用这里就不做声明了. ...

  3. Centos6.9部署vnc

    Centos部署vnc   [root@etl ~]# vncserver -kill :1 命令: service vncserver restart chkconfig --list vncser ...

  4. python之路——19

    王二学习python的笔记以及记录,如有雷同,那也没事,欢迎交流,wx:wyb199594 复习 1.正则表达式 1.字符组 2.元字符 \w \d \s 匹配任意字母数字下划线 数字 空格 \W \ ...

  5. 课上补做:用C语言编程实现ls命令

    课上补做:用C语言编程实现ls命令 一.有关ls ls :用来打印当前目录或者制定目录的清单,显示出文件的一些信息等. ls -l:列出长数据串,包括文件的属性和权限等数据 ls -R:连同子目录一同 ...

  6. linux最小化安装后的初始化

    Linux 最小化安装以后 linux会缺失很多功能,需要我们预先安装一些软件服务,例如mysql(mariadb),gcc等等. 但是最小化的mysql甚至不提供ifconfig,也没有wget命令 ...

  7. 简单的PHP单例模式

    class MySQL { private static $instance; // 阻止外部实例化 private function __construct() { # code... } // 阻 ...

  8. 好用的treeGrid

    jquery easyui 官网:http://www.jeasyui.net/plugins/186.html  下面以学校班级情况,先贴出效果图吧! 数据库设计:红色框中为必须要有的列,右边三个为 ...

  9. 跨年呈献:HP-Socket for Linux 1.0 震撼发布

    三年,三年,又三年,终于,终于,终于不用再等啦!就在今天,HP-Socket for Linux v1.0 震撼发布!还是一样的接口,一样的高效,一样的简便,一样的味道.     HP-Socket ...

  10. 问题-python3.6找不到tkinter

    问题:import tkinter失败 然后直接pip安装也不ok python3.6安装过程中会提示是否选择安装tkinter,如此只有打开原来的安装程序 勾选箭头所示