1.client 

初学者可以看看... 其实我已经有封装好的DLL,不过还是提供一下思路...勿喷,如果又不懂的可以问我服务端下次再发

先不说其他的先把代码全部整上:

     /// <summary>/// TcpClient操作/// </summary>public class TcpClientBusiness{#region    自定义参数/// <summary>/// Tcp客户端模型/// </summary>public static TcpClient tcpClient = new TcpClient ();/// <summary>/// 网络访问数据流/// </summary>public static NetworkStream networkStream ;/// <summary>/// 返回数据/// </summary>public static List<byte[]> ResponseBytes = new List<byte[]>();/// <summary>/// 远程服务IP地址/// </summary>public static string RemoteIp = string.Empty;/// <summary>/// 远程服务IP地址对应端口/// </summary>public static int RemotePort = -1;/// <summary>/// 是否连接/// </summary>public static bool IsConnected = false;#endregion}// TcpClientBusiness tcpClient1 = new TcpClientBusiness();/// <summary>/// 打开TCP连接/// </summary>public  void ConnectToServer(){try{//初始化TCP客户端对象TcpClientBusiness.tcpClient = new TcpClient();//开始连接TcpClientBusiness.tcpClient.BeginConnect(textBox1.Text, int.Parse(textBox2.Text), new AsyncCallback(AsynConnect), TcpClientBusiness.tcpClient);socket =  new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);IPEndPoint port = new IPEndPoint(IPAddress.Parse(textBox1.Text), int.Parse(textBox2.Text));socket.Connect(port);}catch (Exception ex){//VerficationOperate.WriteTextLogs("TcpClientBusiness", "ConnectToServer|异常消息:" + ex.Message.ToString());}}/// <summary>/// 异步连接/// </summary>/// <param name="iar"></param>public  void AsynConnect(IAsyncResult iar){try{//连接成功TcpClientBusiness.tcpClient.EndConnect(iar);//连接成功标志TcpClientBusiness.IsConnected = true;TcpClientBusiness.networkStream = TcpClientBusiness.tcpClient.GetStream();byte[] TempBytes = new byte[1024];//开始异步读取返回数据TcpClientBusiness.networkStream.BeginRead(TempBytes, 0, TempBytes.Length, new AsyncCallback(AsynReceiveData), TempBytes);}catch (Exception ex){// VerficationOperate.WriteTextLogs("TcpClientBusiness", "AsynConnect|异常消息:" + ex.Message.ToString());}}Dictionary<String, Socket> mydic = new Dictionary<string, Socket>();/// <summary>/// 发送数据/// <param name="SendBytes">需要发送的数据</param>/// </summary>public  void SendData(byte[] SendBytes){//NetworkStream network = TcpClientBusiness.tcpClient.GetStream();//string str = Encoding.ASCII.GetString(SendBytes).Replace("\n", "");//network.Write(SendBytes, 0, SendBytes.Length);try{if (TcpClientBusiness.networkStream.CanWrite && SendBytes != null && SendBytes.Length > 0){//发送数据TcpClientBusiness.networkStream.Write(SendBytes, 0, SendBytes.Length);TcpClientBusiness.networkStream.Flush();// socket.Send(Encoding.Default.GetBytes(textBox2.Text));}}catch (Exception ex){if (TcpClientBusiness.tcpClient != null){TcpClientBusiness.tcpClient.Close();//关闭连接后马上更新连接状态标志TcpClientBusiness.IsConnected = false;}//VerficationOperate.WriteTextLogs("TcpClientBusiness", "SendData|异常消息:" + ex.Message.ToString());}}// bool ie = false;bool boolie = false;bool booldb = false; int le = 0;int flag = 0;string  byffe=string.Empty;string byefft=string.Empty;      int num=0;byte[] byffe1 ;delegate void SetTextCallback(string text);/// <summary>/// 获取复制开始处的索引/// </summary>/// <param name="sourceBytesArray">byte[]的所在数组</param>/// <param name="index">byte[]的所在数组的索引</param>/// <returns>复制开始处的索引</returns>private int GetCopyToIndex(byte[][] sourceBytesArray, int index){if (index == 0){return 0;}return sourceBytesArray[index - 1].Length + GetCopyToIndex(sourceBytesArray, index - 1);}/// <summary>/// 合并byte数组/// </summary>/// <param name="sourceBytesArray">要合并的数组集合</param>/// <returns>合并后的byte数组</returns>private byte[] ConcatBytes(params byte[][] sourceBytesArray){int allLength = sourceBytesArray.Sum(o => o.Length);byte[] resultBytes = new byte[allLength];for (int i = 0; i < sourceBytesArray.Length; i++){int copyToIndex = GetCopyToIndex(sourceBytesArray, i);sourceBytesArray[i].CopyTo(resultBytes, copyToIndex);}return resultBytes;}public const int HeadBufferSize = 7;public byte[] headbuffer = new byte[HeadBufferSize];public byte[] bodybuffer;private void SetText(string text){byte[] byteArray = System.Text.Encoding.Default.GetBytes(text);if (text.Substring(0, 2) == "db"&&text!=null){string r = Regex.Replace(text, @"^[A-Za-z]+", string.Empty);flag = int.Parse(r);booldb = true;}if (booldb){if (le != flag){byffe = System.Text.Encoding.Default.GetString(byteArray);le = byteArray.Length;if (byffe == null){return;}byefft += byffe;num += le;if (!boolie){byefft = string.Empty;num = 0;le = 0;byffe = string.Empty;boolie = true;}if (num != 0 && num == flag){ChannelData channel = new ChannelData();List<ChannelData> list = new List<ChannelData>();list = StructXML.DESerializer<List<ChannelData>>(byefft);this.richTextBox1.AppendText(byefft);booldb = false;num = 0;boolie = false;byefft = string.Empty;byffe = string.Empty;}}}//  byte[] byteArray = System.Text.Encoding.Default.GetBytes(text);}/// <summary>/// 异步接受数据/// </summary>/// <param name="iar"></param>public  void AsynReceiveData(IAsyncResult iar){byte[] CurrentBytes = (byte[])iar.AsyncState;try{//结束了本次数据接收int num = TcpClientBusiness.networkStream.EndRead(iar);//这里展示结果为InfoModel的CurrBytes属性,将返回的数据添加至返回数据容器中TcpClientBusiness.ResponseBytes.Add(CurrentBytes);//处理结果后马上启动数据异步读取【目前我每条接收的字节数据长度不会超过1024】byte[] NewBytes = new byte[1024];TcpClientBusiness.networkStream.BeginRead(NewBytes, 0, NewBytes.Length, new AsyncCallback(AsynReceiveData), NewBytes);string inputBytes = Encoding.Default.GetString(CurrentBytes, 0, num);SetTextCallback d = new SetTextCallback(SetText);Invoke(d, new object[] { inputBytes });}catch (Exception ex){//VerficationOperate.WriteTextLogs("TcpClientBusiness", "AsynReceiveData|异常消息:" + ex.Message.ToString());}}}

以上代码是客户端调用方法:

连接对应方法即可, 发送按钮代码:

byte[] byteArray = System.Text.Encoding.Default.GetBytes(textBox3.Text);string inputBytes = Encoding.Default.GetString(byteArray);SendData(byteArray);

C#TCP简单异步通信相关推荐

  1. 异步通信在生活中的例子_AJAX简单异步通信实例分析

    本文实例讲述了AJAX简单异步通信的方法.分享给大家供大家参考.具体分析如下: 客户端:向服务器发出一个空请求. 代码如下: XMLHttpRequest var xmlHttp; function ...

  2. Linux-C TCP简单例子

    Linux-C TCP简单例子 一.简述        记-使用TCP协议通信的简单例子. 例子1:一个客户端,一个服务端,客户端发送信息,服务端就收信息. 例子2:使用多线程实现  服务器与客户端的 ...

  3. 实现TCP简单聊天室(含连接数据库)

    课程设计题目:   多人在线聊天室    目录 第一章 系统概述. 1 第二章 系统需求分析. 2 2.1 系统任务描述. 2 2.2 系统功能分析. 2 2.3 系统可行性分析. 2 第三章 系统概 ...

  4. Qt使用QSocket做tcp简单客户端

    首先要在工程文件.por中添加network 添加新文件 在头文件中导入qtcpsocket 之后定义成员函数用于发送和接收数据 Qt封装的socket使用的是信号槽监听接收到的数据 所以需要添加监听 ...

  5. TCP/IP学习笔记(一)分层模型概述

    简单来说,协议就是不同计算机之间进行通讯所遵循的标准,只有使用相同协议的计算机之间才可以实现网络通讯.这使得即使两台计算机之间的各种设备不同,只要使用的协议相同,就可以通讯 以两个人对话为例,协议可以 ...

  6. C++TCP和UDP属于传输层协议

    TCP和UDP属于传输层协议.其中TCP提供IP环境下的数据可靠传输,它事先为要发送的数据开辟好连接通道(三次握手),然后再进行数据发送:而UDP则不为IP提供可靠性,一般用于实时的视频流传输,像rt ...

  7. 浅谈基于TCP和UDP的协议设计

    From:http://blog.sina.com.cn/s/blog_48d4cf2d0101859x.html 一个基于TCP/WebSockets的超级精简的长连接消息协议:https://st ...

  8. C++基于TCP和UDP的socket通信

    TCP和UDP属于传输层协议.其中TCP提供IP环境下的数据可靠传输,它事先为要发送的数据开辟好连接通道(三次握手),然后再进行数据发送:而UDP则不为IP提供可靠性,一般用于实时的视频流传输,像rt ...

  9. 网络基本概念之TCP, UDP, 单播(Unicast), 多播(组播)(Multicast)

    网络基本概念之TCP, UDP, 单播(Unicast), 多播(组播)(Multicast) 我们周围一切几乎都依赖于把事情抽象成低等级,并在某一点把它具体化,在一些设计概念中,接口层十分清晰并且目 ...

最新文章

  1. mysql 一条sql update多条记录
  2. Codeforces 1149 题解
  3. TensorFlow 教程——基本分类:对服装图像进行分类
  4. leetcode7 整数反转
  5. 【转】Snackbar和Toast的花式使用,这一篇就够了
  6. ASP.NET开发,简化与封装
  7. IntelliJ IDEA 导入项目后出现非法字符解决方法
  8. html高度随宽度编号,纯css实现容器高度随宽度等比例变化的四种解决方案
  9. 使用OTA绕过AppStore安装App
  10. 水下自动循迹机器人_水下避碰!国内首艘自主航行系统实验船试水
  11. SpringCloud Config详解
  12. java如何构建图_如何从传递边构建子图?
  13. agv车辆调度系统-技术篇
  14. Windows-dos命令
  15. 什么是nmap以及如何使用它
  16. python 变量使用进阶
  17. 微信公众平台开发测试账号配置URL失败的问题
  18. 什么是西安80坐标系
  19. 关于高性能计算机的一些介绍
  20. 佳能Canon PIXMA MG4170 打印机驱动

热门文章

  1. FDTD脚本教程——结构的创建
  2. 《海外社交媒体营销》一一2.1 社交媒体与其他媒体的关系
  3. 工业4G无线产品应用于充电桩远程监控解决方案
  4. oracle 王景田_埃里森:将通过云计算推动公司增长 而非并购
  5. 使用ensp模拟器中的防火墙(USG6000V)配置NAT(网页版)
  6. 助过网:为什么公务员辞职率这么低?
  7. 【春秋云境.com】每月10号1024会员日,双倍体验惊喜不停
  8. php tinyint 范围,TINYINT(1)详解
  9. RT-Thread线程管理以及内核裁剪
  10. css !important用法CSS样式使用优先级判断