C#服务端与客户端通信详解

开发 后端
C#服务端与客户端通信详解主要向你介绍了如果有多个客户端发动对服务器端的连接会怎么样的情况,希望对你了解服务端与客户端通信有所帮助。

C#服务端与客户端通信之获取多个客户端连接的情况是如何处理的呢?让我们来看看:

C#服务端与客户端通信的问题:现在我们再接着考虑,如果有多个客户端发动对服务器端的连接会怎么样,为了避免你将浏览器向上滚动,来查看上面的代码,我将它拷贝了下来,我们先看下客户端的关键代码:

C#服务端与客户端通信实现实例:

  1. TcpClient client;  
  2.  
  3. for (int i = 0; i <=2; i++) {  
  4.     try {  
  5.         client = new TcpClient();  
  6.         client.Connect("localhost", 8500);  
  7. // 与服务器连接  
  8.     } catch (Exception ex) {  
  9.         Console.WriteLine(ex.Message);  
  10.         return;  
  11.     }  
  12.  
  13.     // 打印连接到的服务端信息  
  14.     Console.WriteLine(  
  15. "Server Connected!{0} --> {1}",  
  16. client.Client.LocalEndPoint,  
  17.  client.Client.RemoteEndPoint);  
  18. }  

C#服务端与客户端通信问题:如果服务端代码不变,我们先运行服务端,再运行客户端,那么接下来会看到这样的输出:

  1. // 服务端  
  2. Server is running ...  
  3. Start Listening ...  
  4. Client Connected!127.0.0.1:8500 <-- 127.0.0.1:5226  
  5.  
  6. // 客户端  
  7. Client Running ...  
  8. Server Connected!127.0.0.1:5226 --> 127.0.0.1:8500  
  9. Server Connected!127.0.0.1:5227 --> 127.0.0.1:8500  
  10. Server Connected!127.0.0.1:5228 --> 127.0.0.1:8500  

就又回到了本章第2.2小节“多个客户端与服务端连接”中的处境:尽管有三个客户端连接到了服务端,但是服务端程序只接收到了一个。这是因为服务端只调用了一次listener.AcceptTcpClient(),而它只对应一个连往客户端的Socket。但是操作系统是知道连接已经建立了的,只是我们程序中没有处理到,所以我们当我们输入“netstat -a”时,仍然会看到3对连接都已经建立成功。

为了能够接收到三个客户端的连接,我们只要对服务端稍稍进行一下修改,将AcceptTcpClient方法放入一个do/while循环中就可以了:

C#服务端与客户端通信实现实例:

  1. Console.WriteLine("Start Listening ...");  
  2.  
  3. while (true) {  
  4.     // 获取一个连接,同步方法  
  5.     TcpClient remoteClient =   
  6. listener.AcceptTcpClient();  
  7.     // 打印连接到的客户端信息  
  8.     Console.WriteLine("Client Connected!{0} <-- {1}",  
  9. remoteClient.Client.LocalEndPoint,   
  10. remoteClient.Client.RemoteEndPoint);  
  11. }  

这样看上去是一个死循环,但是并不会让你的机器系统资源迅速耗尽。因为前面已经说过了,AcceptTcpClient()再没有收到客户端的连接之前,是不会继续执行的,它的大部分时间都在等待。另外,服务端几乎总是要保持在运行状态,所以这样做并无不可,还可以省去“按Q退出”那段代码。此时再运行代码,会看到服务端可以收到3个客户端的连接了。

C#服务端与客户端通信实例运行结果:

  1. Server is running ...  
  2. Start Listening ...  
  3. Client Connected!127.0.0.1:8500 <-- 127.0.0.1:5305  
  4. Client Connected!127.0.0.1:8500 <-- 127.0.0.1:5306  
  5. Client Connected!127.0.0.1:8500 <-- 127.0.0.1:5307 

C#服务端与客户端通信的基本情况就向你介绍到这里,希望对你了解和学习C#服务端与客户端通信有所帮助。

【编辑推荐】

  1. C#网络聊天程序三大模式浅析
  2. C#服务端端口侦听浅析
  3. C#服务端与客户端连接实现浅析
  4. C#服务端与客户端连接实现浅谈
  5. C#服务端与客户端通信浅析
责任编辑:仲衡 来源: 博客园
相关推荐

2009-08-21 15:59:22

服务端与客户端通信

2009-08-21 15:36:41

服务端与客户端

2009-08-21 15:54:40

服务端与客户端

2010-03-18 17:47:07

Java 多客户端通信

2011-09-09 09:44:23

WCF

2023-03-06 08:01:56

MySQLCtrl + C

2022-01-05 08:03:23

C#通信Rest

2009-08-06 17:12:13

C# WebServi

2024-03-06 14:58:52

客户端微服务架构

2023-04-03 08:13:05

MySQLCtrl + C

2009-08-21 15:22:56

端口侦听

2010-11-19 14:22:04

oracle服务端

2020-03-19 08:00:00

客户端KubernetesAPI

2010-05-12 15:46:51

Subversion客

2015-01-13 10:32:23

RestfulWeb框架

2009-06-10 16:25:02

2009-08-07 13:55:35

Java客户端类调用C# WebServi

2021-06-11 06:54:34

Dubbo客户端服务端

2010-05-31 10:11:32

瘦客户端

2009-03-04 10:27:50

客户端组件桌面虚拟化Xendesktop
点赞
收藏

51CTO技术栈公众号