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问题入手(博客按照这样的问题入手,是因为当时我也是从这里 ...
随机推荐
- flutter mac 下安装
- 【申嵌视频】基于VMWare虚拟机下安装ubuntu操作系统的详细步骤
[申嵌视频]基于VMWare虚拟机下安装ubuntu操作系统 适合搭建mini2440, Tiny6410, smart210,Tiny4412, NanoPC-T2, NanoPC-T3, Nano ...
- 黄聪:微信h5支付demo微信H5支付demo非微信浏览器支付demo微信wap支付
一.首先先确定H5支付权限已经申请! 二.开发流程 1.用户在商户侧完成下单,使用微信支付进行支付 2.由商户后台向微信支付发起下单请求(调用统一下单接口)注:交易类型trade_type=MWEB ...
- ES - Index Templates 全局index模板
1.Index Templates 之前我们聊过Dynamic template,它作用范围是特定的Index,如果我们想针对全局Index进行设置该如何操作呢? Index Templates 可以 ...
- 前端-JavaScript2-1——JavaScript基础复习及上次作业答案
昨天讲解的JS是编程最最简单的一些基础知识,复习一下: JavaScript书写环境,<script>标签 1 <script type=”text/javascript”&g ...
- ssh 端口转发实践
A: 172.28.92.114 本地主机B: 172.28.92.117 中间主机C: 172.28.92.118 目的主机 (这里名字叫目的主机更合适,原先把这里叫成远程主机,导致我一直认为远程端 ...
- note 9 列表、时间复杂度、排序
列表 List +内建(built-in)数据结构(data structure),用来存储一系列元素(items) 如:lst = [5.4,'hello',2] 前向索引.后向索引.切片.拼接.成 ...
- windows 下借助7zip实现命令行解压缩
windows 下借助7zip实现命令行解压缩 64位电脑下载 https://www.7-zip.org/a/7z1805-x64.exe 安装 安装目录下所有文件如下: 在命令行下只需要用到 7z ...
- idea中使用MyBatis Generator
1.新建maven项目 2.新建Generator配置文件 generator_config.xml <?xml version="1.0" encoding="U ...
- WinSDK-键盘消息
一 参考url http://www.cnblogs.com/5iedu/p/4656178.html http://blog.csdn.net/yiyefangzhou24/article/deta ...