C#下用TcpClient传输数组

原创 2008年10月03日 11:15:00

       这个还算简单,在C#中用TcpListener  TcpClient NetworkStream这三个类可以很好的实现服务端和客户端的通信。至于传送对象类型就要用到序列化和反序列化了。关于这方面的文章可见冰点的《C# 序列化和反序列化Ojecthttp://blog.myspace.cn/index.cfm?fuseaction=blog.view&friendID=1306783616&blogID=401530033

 

下面又开始贴代码-_-!

服务端

  1. using System;
  2. using System.Net;
  3. using System.Net.Sockets;
  4. using System.IO;
  5. using System.Text;
  6. using System.Runtime.Serialization.Formatters.Binary;
  7. using System.Runtime.Serialization; 
  8. namespace SocketDis
  9. {
  10.     class server
  11.     {        
  12.         static void Main()
  13.         {
  14.             
  15.             TcpListener listener = new TcpListener(6161);
  16.             listener.Start();
  17.             Console.Write("等待连接.................");            
  18.             TcpClient client = listener.AcceptTcpClient();
  19.             Console.WriteLine("已连接.");
  20.             NetworkStream ns = client.GetStream();                
  21.             try
  22.             {
  23.                 //反序列化
  24.                 IFormatter formatter = new BinaryFormatter();
  25.                 int[] a=((int[])formatter.Deserialize(ns));
  26.                 //计算结果
  27.                 int result = cout(a);
  28.                 //序列化并回发数据                
  29.                 formatter = new BinaryFormatter();
  30.                 formatter.Serialize(ns, result);             
  31.             }
  32.              catch (Exception e)
  33.              {
  34.                 Console.WriteLine(e.ToString());
  35.              }
  36.              Console.ReadKey(true);
  37.         }
  38.         /// <summary>
  39.         /// 计算
  40.         /// </summary>
  41.         /// <param name="data">需要计算的数组</param>
  42.         /// <returns>计算结果</returns>
  43.         public static int cout(int[] data)
  44.         {
  45.             int total = 0;
  46.             foreach (int b in data)
  47.             {
  48.                 total += b;
  49.             }
  50.             return total;
  51.         }
  52.     }
  53. }

客户端:

  1. using System;
  2. using System.Net;
  3. using System.Net.Sockets;
  4. using System.Threading;
  5. using System.IO;
  6. using System.Text;
  7. using System.Runtime.Serialization.Formatters.Binary;
  8. using System.Runtime.Serialization; 
  9. namespace SocketDis
  10. {
  11.     class client
  12.     {
  13.         static void Main()
  14.         {
  15.             string ip = "127.0.0.1";
  16.             string port = "6161";
  17.             IPAddress serverIp = IPAddress.Parse(ip);
  18.             int serverPort = Convert.ToInt32(port);
  19.             IPEndPoint iep = new IPEndPoint(serverIp, serverPort);//主机终结点
  20.             TcpClient client = new TcpClient();
  21.             client.Connect(iep);//连接服务端
  22.             NetworkStream ns = client.GetStream();//网络数据流
  23.             int[] data ={100,234,116};
  24.             //序列化数组并发送
  25.             IFormatter formatter = new BinaryFormatter();
  26.             formatter.Serialize(ns, data);
  27.             Console.WriteLine("等待主机返回结果......");
  28.             Thread.Sleep(1000);
  29.             formatter = new BinaryFormatter();
  30.             int result = (int)formatter.Deserialize(ns);
  31.             Console.WriteLine("计算结果是:"+result.ToString());
  32.             Console.ReadKey(true);
  33.         }
  34.     }
  35. }

tcp传输例子

/* 文档笔记: 1.     TCP通信结构图       服务器                                客户端         |         v       创建...
  • sanmaoljh
  • sanmaoljh
  • 2016年08月12日 11:10
  • 872

TCP socket发送整形数据(数组,结构体)

使用TCP发送整型等(非字符型)数据时,经常会遇到不能将发送类型转换成const char*的错误。这其实是socket设定的问题,socket设定为只能传送字符型数据。 从read和write的函...
  • tecsai
  • tecsai
  • 2016年12月02日 09:52
  • 1555

C#通过TCP传送结构体

        在写C#TCP通信程序时,发送数据时,只能发送byte数组,处理起来比较麻烦不说,如果是和VC6.0等写的程序通信的话,很多的都是传送结构体,在VC6.0中可以很方便的把一个char[...
  • Whislly
  • Whislly
  • 2007年10月13日 20:04
  • 1822

QT5界面程序和VS程序的TCP/IP通信,发送数组、结构体等

由于项目需要,本人开发的一个界面程序需要和其他同事编写的VS程序进行TCP/IP通信,且根据通信协议要发送数组或者结构体,折腾了两天终于搞通了,记录一下,也算是和大家分享一下,省的大家再走弯路。   ...
  • Shawn_Zhangguang
  • Shawn_Zhangguang
  • 2017年03月07日 17:18
  • 1257

关于Socket发送byte数组的问题

最新在测试的时候突发奇想,就想利用先用的资源模拟一个学生端的软件 进行提交数据。跟开发沟通以及抓包后了解了大概的通信的协议 如下如所示 协议中前面四个字节为消息的长度,后面4个字节为消息的类型,...
  • qq744746842
  • qq744746842
  • 2015年03月17日 22:10
  • 4003

一个TCPClient和TCPListener的例子 dotNet

真希望有时间能静下心来写几篇c#、java和c++ socket相互通信的帖子。写写它们的异同点,总结一下。下面是msdn上的一个例子,使用TCPClient来处理连接与收发,特别简单。static ...
  • lincyang
  • lincyang
  • 2011年05月05日 13:30
  • 5793

C# 的TCPClient异步连接与异步读数据

Socket的TCP通讯 一、 socket的通讯原理 服务器端的步骤如下。 (1)建立服务器端的Socket,开始侦听整个网络中的连接请求。 (2)当检测到来自客户端的连接请...
  • u011555996
  • u011555996
  • 2016年03月10日 14:08
  • 10329

TCP的发送系列 — 发送缓存的管理(一)

主要内容:TCP发送缓存的管理,包括发送缓存的初始化、sock发送缓存的动态调整、sock发送缓存的申请和释放。 内核版本:3.15.2。 TCP对发送缓存的管理是在两个层面上进行的,一个层面是单个s...
  • zhangskd
  • zhangskd
  • 2015年09月06日 22:44
  • 8410

C#下用TcpClient传输数组

       这个还算简单,在C#中用TcpListener  TcpClient NetworkStream这三个类可以很好的实现服务端和客户端的通信。至于传送对象类型就要用到序列化和反序列化了。关...
  • a77248848
  • a77248848
  • 2008年10月03日 11:15
  • 2556

C# TcpClient网络编程传输文件(带文件名)(必须看)

转载自:https://www.cnblogs.com/kongbailingluangan/p/6476855.html 一、简述   利用C# TcpClient在局域网内传输文件,可是文件发...
  • Sayesan
  • Sayesan
  • 2017年12月14日 09:38
  • 105
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#下用TcpClient传输数组
举报原因:
原因补充:

(最多只允许输入30个字)