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问题入手(博客按照这样的问题入手,是因为当时我也是从这里 ...
随机推荐
- MessageFormat.format 包含单引号引起的不可替换
MessageFormat.format("region = '{0}'", "en");实际结果是region = {0}如果需要被替换的话,需要用双单引号 ...
- c# 使用http摘要认证
.net 使用http摘要认证,返回json数据 using System; using System.Collections.Generic; using System.Linq; using Sy ...
- Kettle解决方案: 第三章 安装和配置
- 【Leetcode】无重复字符的最长子串
暴力解法,枚举所有子字符串组合 输入:长度[0,n]的字符串 耗时过长--- class Solution { public: int lengthOfLongestSubstring(string ...
- Optaplanner规划引擎的工作原理及简单示例(2)
开篇 在前面一篇关于规划引擎Optapalnner的文章里(Optaplanner规划引擎的工作原理及简单示例(1)),老农介绍了应用Optaplanner过程中需要掌握的一些基本概念,这些概念有且于 ...
- 工控随笔_18_西门子_WinCC的VBS脚本_07_变量作用域和传值、传址
在vbs脚本中也存在和其他编程语言一样的概念,那就是变量的作用域,变量的作用域决 定在什么范围内可以访问. 同样的在vbs脚本中对于变量也有一个生命周期, 变量的生命周期决定了变量的存续时间 这个主要 ...
- Chromium(Chrome) frame structure detail
1. Chromium VS Chrome Chromium is an open-source Web browser project started by Google, to provide t ...
- SpringBoot集成Atomikos使用Oracle数据库mybatis、jta框架
项目中需要数据库分布式事物的实现,于是采用了atumikos技术. 因为生产上需要稳定,所以采用了springboot 1.5.9.RELEASE版本. 本文代码gitlab下载地址: https:/ ...
- python 操作excel
操作excel安装的三种方式: 1.pip instaill xlwt #写excel pip instaill xlrd #读excel pip instaill xl ...
- Linux系统编程——fcntl
fcntl可实现对指定文件描述符的各种操作,其函数原型如下: int fcntl(int fd, int cmd, ... /* arg */ ); 头文件 #include <unistd.h ...