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问题入手(博客按照这样的问题入手,是因为当时我也是从这里 ...
随机推荐
- 基于javaMail的邮件发送--excel作为附件
基于JavaMail的Java邮件发送 Author xiuhong.chen@hand-china.com Desc 简单邮件发送 Date 2017/12/8 项目中需要根据物料资质的状况实时给用 ...
- MQTT研究之EMQ:【JAVA代码构建X509证书【续集】】
openssl创建私钥,获取公钥,创建证书都是比较简单的,就几个指令,很快就可以搞定,之所以说简单,是因为证书里面的基本参数配置不需要我们组装,只需要将命令行里面需要的几个参数配置进去即可.但是呢,用 ...
- 排产的两种方式(前推式与后拉式)在Optaplanner上的体现
生产计划的约束 在制定生产计划过程中,必然是存在某些制约因素,满足某些需求才能进行的,或是交期保证.或是产能限制.或是关键工序制约.即TOC理论 - 任何系统至少存在着一个制约因素/瓶颈:否则它就可能 ...
- 工控随笔_13_西门子_WinCC的VBS脚本_04_变量类型之二
上一个随笔说了一些关于vbs变量类型的内容,这一篇我们继续说说变量类型相关的内容. 一.NULL补充内容 '需要注意的是,NULL不能简单通过 = 来进行比较,而必须通过 'IsNull函数来实现 ' ...
- elasticsearch 5.0以上不支持consistency 和 quorum
从ES2.2升级到5.2后,原先执行put 带 consistency=all / quorum 参数的,都报错了,提示语法错误.. 百度查了一通,都没发现相关问题.无奈,还是查官方文档.. 发现这是 ...
- windows2008 apache2.4 tomcat-7多域名绑定环境配置
=====================软件清单Apache2.4.33apache-tomcat-7.0.85===================== 1.安装apache 1.1下载ap ...
- tornado+jsonrpc
rpc:远程过程调用(A服务调用B服务的一个方法或函数) tornado中jsonrpc的使用 import json import tornado.httpserver import tornado ...
- LeetCode100.相同的树
给定两个二叉树,编写一个函数来检验它们是否相同. 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的. 示例 1: 输入: 1 1 / \ / \ 2 3 2 3 [1,2,3], [1 ...
- 关键字new与malloc函数
做题出bug,OJ说我没有定义new. 纳尼?new还需要定义?不都是直接用的吗,明明在自己的编译器里都可以通过的! 编译器:劳资是C++.... 一番倒腾后发现,我用的C++,但是OJ的编译器是C, ...
- Dao层抽取BaseDao公共方法
设计IBseDao接口,定义公共的CRUD方法. // IBaseDao 接口,定义公共的CRUD方法 public interface IBaseDao<T> { public void ...