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();
}
}
}
}
}
C#客户端和服务端数据的同步传输 (转载)的更多相关文章
- C# TCP实现多个客户端与服务端 数据 与 文件的传输
C#菜鸟做这个东东竟然花了快三天的时间了,真是菜,菜,菜--- 下面是我用C#写的 一个简单的TCP通信,主要的功能有: (1) 多个客户端与服务器间的数据交流 (2)可以实现群发的功能 (3)客户端 ...
- [通信] C# TCP实现多个客户端与服务端 数据 与 文件的传输
说明: http://download.csdn.net/detail/chwei_cson/4423874 源码: http://download.csdn.net/download/meicanj ...
- TCP学习之三:客户端、服务端同步传输字符串
参考学习张子阳大神的博客:http://www.cnblogs.com/JimmyZhang/category/101698.html 一个客户端.发送一条消息 客户端: 服务端: 注意:Networ ...
- 客户端获取服务端自定义类数据 z
客户端获取服务端自定义类数据 问题一:超时问题,在最后获取数据的时候突然提示服务超时,服务已断开 解决:配置文件添加: <bindings> <wsHttpBinding> & ...
- [SignalR]SignalR与WCF双工模式结合实现服务端数据直推浏览器端
原文:[SignalR]SignalR与WCF双工模式结合实现服务端数据直推浏览器端 之前开发基于WinForm监控的软件,服务端基于Wcf实现,里面涉及双工模式,在客户端里面,采用心跳包机制保持与服 ...
- [Java]Hessian客户端和服务端代码例子
简要说明:这是一个比较简单的hessian客户端和服务端,主要实现从客户端发送指定的数据量到服务端,然后服务端在将接收到的数据原封不动返回到客户端.设计该hessian客户端和服务端的初衷是为了做一个 ...
- SignalR 实现web浏览器客户端与服务端的推送功能
SignalR 是一个集成的客户端与服务器库,基于浏览器的客户端和基于 ASP.NET 的服务器组件可以借助它来进行双向多步对话. 换句话说,该对话可不受限制地进行单个无状态请求/响应数据交换:它将继 ...
- Fresco 源码分析(二) Fresco客户端与服务端交互(3) 前后台打通
4.2.1.2.4 PipelineDraweeControllerBuilder.obtainController()源码分析 续 上节中我们提到两个核心的步骤 obtainDataSourceSu ...
- Fresco 源码分析(二) Fresco客户端与服务端交互(1) 解决遗留的Q1问题
4.2 Fresco客户端与服务端的交互(一) 解决Q1问题 从这篇博客开始,我们开始讨论客户端与服务端是如何交互的,这个交互的入口,我们从Q1问题入手(博客按照这样的问题入手,是因为当时我也是从这里 ...
随机推荐
- 1、编写一个简单Makefile模板
一.Makefile简介 一个工程中的源文件不计其数,其按类型.功能.模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译, ...
- 微信小程序自运营器 微信小程序自动运营器(让你的微信小程序,公众号零运营成本,24小时全自动运营)
自动发单,自动评价,自动评论,自动推广 微信小程序自运营器 微信小程序自动运营器(让你的微信小程序,公众号零运营成本,24小时全自动运营) 我们会根据你的微信公众号或微信小程序定制开发带有一定AI智 ...
- element-ui 点击获取table的行索引
<el-table :data="list" v-loading.body="listLoading" element-loading-text=&quo ...
- YARN简述
YARN(Yet Another Resource Negotiator)是Hadoop的集群资源管理系统.YARN提供请求和使用集群资源的API,但这些API很少直接用于用户代码.相反,用户代码中用 ...
- 使用命令行执行jmeter的方法
1. 简介 使用非 GUI 模式,即命令行模式运行 JMeter 测试脚本能够大大缩减所需要的系统资 本文介绍windows下以命令行模式运行的方法. 1.1. 命令介绍 jmeter -n -t & ...
- Python绘图的颜色设置
(转载):Python中的matplotlib函数中的颜色选取 转载链接:https://www.cnblogs.com/darkknightzh/p/6117528.html 原文内容:完全出自于自 ...
- airflow整体架构
run命令运行过程 读取dag文件生成task依赖关系,然后生成封装airflow run的command命令,通过celery发送到executor端,重新执行该airflow run命令. sch ...
- Egret飞行模拟-开发记录02
1.Egret异步加载资源制作loading界面 使用EUI,EXML组件制作loading界面时,需要皮肤主题资源加载控制.即default.thm.json配置文件. 下一篇专门记录这部分. 2. ...
- windows2008 apache2.4 tomcat-7多域名绑定环境配置
=====================软件清单Apache2.4.33apache-tomcat-7.0.85===================== 1.安装apache 1.1下载ap ...
- jail-break-rule
switchOmega plugin for firefox and chrome https://raw.githubusercontent.com/gfwlist/gfwlist/master/g ...