C#服务端与客户端通信的建立:上面服务端、客户端的代码已经建立起了连接,这通过使用“netstat -a”命令,从端口的状态可以看出来,但这是操作系统告诉我们的。那么我们现在需要知道的就是:服务端的程序如何知道已经与一个客户端建立起了连接?
服务器端开始侦听以后,可以在TcpListener实例上调用AcceptTcpClient()来获取与一个客户端的连接,它返回一个TcpClient类型实例。此时它所包装的是由服务端去往客户端的Socket,而我们在客户端创建的TcpClient则是由客户端去往服务端的。这个方法是一个同步方法(或者叫阻断方法,block method),意思就是说,当程序调用它以后,它会一直等待某个客户端连接,然后才会返回,否则就会一直等下去。这样的话,在调用它以后,除非得到一个客户端连接,不然不会执行接下来的代码。一个很好的类比就是Console.ReadLine()方法,它读取输入在控制台中的一行字符串,如果有输入,就继续执行下面代码;如果没有输入,就会一直等待下去。
C#服务端与客户端通信实现实例:
- class Server {
- static void Main(string[] args) {
- Console.WriteLine("Server is running ... ");
- IPAddress ip = new IPAddress(
- new byte[] { 127, 0, 0, 1 });
- TcpListener listener = new TcpListener(ip, 8500);
- listener.Start(); // 开始侦听
- Console.WriteLine("Start Listening ...");
- // 获取一个连接,中断方法
- TcpClient remoteClient = listener.AcceptTcpClient();
- // 打印连接到的客户端信息
- Console.WriteLine("Client Connected!{0} <-- {1}",
- remoteClient.Client.LocalEndPoint,
- remoteClient.Client.RemoteEndPoint);
- // 按Q退出
- }
- }
运行这段C#服务端与客户端通信实现代码,会发现服务端运行到listener.AcceptTcpClient()时便停止了,并不会执行下面的Console.WriteLine()方法。为了让它继续执行下去,必须有一个客户端连接到它,所以我们现在运行客户端,与它进行连接。简单起见,我们只在客户端开启一个端口与之连接:
- class Client {
- static void Main(string[] args) {
- Console.WriteLine("Client Running ...");
- TcpClient client = new TcpClient();
- try {
- client.Connect("localhost", 8500); // 与服务器连接
- } catch (Exception ex) {
- Console.WriteLine(ex.Message);
- return;
- }
- // 打印连接到的服务端信息
- Console.WriteLine("Server Connected!{0} --> {1}",
- client.Client.LocalEndPoint,
- client.Client.RemoteEndPoint);
- // 按Q退出
- }
- }
此时C#服务端与客户端通信实现,服务端、客户端的输出分别为:
- // 服务端
- Server is running ...
- Start Listening ...
- Client Connected!127.0.0.1:8500 <-- 127.0.0.1:5188
- // 客户端
- Client Running ...
- Server Connected!127.0.0.1:5188 --> 127.0.0.1:8500
C#服务端与客户端通信的基本情况就向你介绍到这里,希望对你了解和学习C#服务端与客户端通信实现有所帮助。
【编辑推荐】