12篇学通C#网络编程——第四篇 TCP应用编程

12篇学通C#网络编程——第四篇 TCP应用编程,第1张

概述年底了,人浮躁多了,沉不下去心研究技术了,不过昨天终于抢到了回家的票,很开心。 言归正卷,在WCF出来之后,可能我们玩这些原始的TCP越来越少了,我们知道WCF对TCP进行了再一次的包装,第一反应给我

    年底了,人浮躁多了,沉不下去心研究技术了,不过昨天终于抢到了回家的票,很开心。

    言归正卷,在WCF出来之后,可能我们玩这些原始的TCP越来越少了,我们知道WCF对TCP进行了再一次的包装,第一反应给我们的或许是

同构系统用TCP,异构系统用http,那么问题来了,异构系统到底可不可以用TCP呢?至少WCF是玩不了的,因为其他语言没有针对.net的“服务

引用”,也没有什么ChannelFactory给你去玩,如果你是一定要追求性能的话,原始的TCP会助你一臂之力的。

   我们知道最最原始的是玩Socket,由于Socket比较复杂,但是最灵活,C#里面提供了两个简化的包装类:TcpListener和TcpClIEnt。

一:TcpListener

   这个是作为服务器端程序而存在的,我们来看看如何使用这服务端。

1: 开启监听地址

1 TcpListener Listener = new TcpListener(new System.Net.IPAddress(new byte[] { 127,0,1)">1 }),1)">2222);2 3 Listener.Start();

 

2:好了,已经开启了,服务端程序开始监听该端口的客户端请求了,那么如何获取该请求呢?简单,Listener的AcceptTcpClIEnt属性搞定。

1 var myclIEnt = Listener.AcceptTcpClIEnt();


 3:我们知道TCP传的是字节流,通过myclIEnt.GetStream()就可以获取一个NetworkStream,利用这个Stream就可以进行收发信息了。

 <1> 收 *** 作:

1 BinaryReader sr = new BinaryReader(clIEnt.GetStream());3  //客户端数据4  var data = sr.ReadString();


<2>发 *** 作:也就是所谓的返回值

处理完了之后要返回数据给客户端2 BinaryWriter sw =  BinaryWriter(clIEnt.GetStream());3 4 sw.Write(string.Format("当前时间:{0},服务端已经处理完毕!",DateTime.Now));

 

  这里要注意的地方就是AcceptTcpClIEnt是阻塞线程的,直到收到客户端请求才算建立了一个TCP连接,在服务端处理的过程中,后续的客户端的请求将

会处理等待直到前一个请求处理完,说了这么多,就是每一个请求我们都建议开一个线程专门为其服务,类似这样。

 1 接受客户端的连接请求 2 var myclIEnt = Listener.AcceptTcpClIEnt(); 3  4 用工作线程执行用户的请求 5 Task.Factory.StartNew((obj) => 6 { 7     var clIEnt = obj as TcpClIEnt; 8  9     clIEnt.Close();10 11 },myclIEnt);


好了,服务器端大概就是这个样子,再有的就是一些相关属性配置了,像wcf那样什么opentime,sendtime啥的。

 

二:TcpClIEnt

     客户端也很简单,只要我们Connect一下端口,然后通过NetworkStream再Send一些数据就OK了。

1 TcpClIEnt clIEnt =  TcpClIEnt();3 clIEnt.Connect(4 5 BinaryWriter bw = 6 7 bw.Write(你好,我来请求你! {0},当前线程:{1}

VIEw Code
using System; System.Collections.Generic; 3  System.linq; System.Text; 5  System.Net.sockets; System.IO; 7  System.Threading.Tasks; 8  System.Threading; System.Net;11 namespace ConsoleApplication112 13     class Program14     {15         static voID Main(string[] args)16         {17             TcpListener Listener = 18 19             Listener.Start();20 21             用专门的线程来接受请求22             Task.Factory.StartNew(() =>23             {24                 不间断的接受客户端请求25                 while (true)26                 {27                     28                     29 30                     31                     Task.Factory.StartNew((obj) =>32                     {33                         34 35                         BinaryReader sr = 36 37                         38                         var data = sr.ReadString();39 40                         客户端ip41                         var ip = (IPEndPoint)clIEnt.ClIEnt.RemoteEndPoint;42 43                         Console.Writeline(",DateTime.Now,44                                                                                                 ip.Address,ip.Port,data);45 46                         Thread.Sleep(1000 * 547 48                         49                         BinaryWriter sw = 50 51                         sw.Write(52 53                         clIEnt.Close();54 55                     },myclIEnt);56                 }57             });58 59             Console.Writeline(服务端已经启动...60 61             Console.Read();62         }63     }64 }


客户端:

VIEw Code
 9 10  ConsoleApplication212     13 14         15 16             for (int i = 0; i < 100; i++17 18                 Task.Factory.StartNew(() =>20                     int j = 0; j < 100; j++21 22                         TcpClIEnt clIEnt = 23 24                         clIEnt.Connect(25 26                         BinaryWriter bw = 27 28                         bw.Write(30                         BinaryReader sr = 31 32                         var s =33 34                         Console.Writeline(接受到数据:{0}35                     }36                 });37             }38 39 40 41 42 }


 

总结

以上是内存溢出为你收集整理的12篇学通C#网络编程——第四篇 TCP应用编程全部内容,希望文章能够帮你解决12篇学通C#网络编程——第四篇 TCP应用编程所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1213797.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存