C# TcpListener实现简单服务器:用户连接管理与消息收发
C# TcpListener实现简单服务器:用户连接管理与消息收发
这篇文章将介绍如何使用 C# 和 TcpListener 类创建一个简单的服务器应用程序。这个服务器能够处理多个客户端连接,接收来自客户端的消息,并向特定客户端发送消息。
代码实现
以下是完整的代码示例,包含在一个名为 'UdpClientDemo_Server' 的命名空间下的 'Server' 类中:C#namespace UdpClientDemo_Server{ internal class Server { TcpListener server; Action
public Server(Action<String> ShowMsg, String localIp, int port) { this.ShowMsg = ShowMsg; this.localEp = new IPEndPoint(IPAddress.Parse(localIp), port); server = new TcpListener(localEp); server.Start(); Task.Run(() => { StartJS(); }); } private void StartJS() { while (true) { remote_client = server.AcceptTcpClient(); SUser newUser = new SUser(ShowMsg, remote_client);
userList.Add(newUser); String remoteEp = remote_client.Client.RemoteEndPoint.ToString(); ShowMsg(remoteEp + '上线了'); NetworkStream ns = remote_client.GetStream();
BinaryReader br = new BinaryReader(ns); Task.Run(() => { while (true) {
try { String sss = br.ReadString(); ShowMsg(remoteEp + '>'+ sss); } catch { ShowMsg('客户端掉线了!'); break; }
} }); } } public void Send(String str, int userIndex) { SUser findUser = null; int i = 1; foreach (SUser u in userList) { if (userIndex == i) { findUser = u; break; } i++; } findUser.Send(str); } }}
代码解释
- Server 类: - 服务器的核心类,负责监听连接请求、管理已连接客户端和处理消息。2. 构造函数: -
Action<String> ShowMsg: 委托,用于将消息显示在用户界面上。 -String localIp,int port: 服务器监听的本地IP地址和端口号。 - 初始化TcpListener对象,并开始监听连接请求。 - 在后台线程中调用StartJS方法处理连接。3. StartJS 方法: - 循环监听连接请求。 - 当有新的客户端连接时: - 创建一个新的TcpClient对象来管理连接。 - 创建一个新的SUser对象来表示该用户,并将委托和TcpClient对象传递给它。 - 将新的SUser对象添加到userList中。 - 显示消息 indicating new client connection. - 获取NetworkStream对象用于读写数据。 - 创建BinaryReader对象用于读取客户端消息。 - 在新的后台线程中循环读取客户端消息。4. Send 方法: -String str: 要发送的消息内容。 -int userIndex: 目标用户的索引。 - 查找userList中对应索引的SUser对象。 - 调用SUser对象的Send方法发送消息。
总结
这段代码演示了如何使用 C# TcpListener 类创建一个简单的服务器应用程序。它涵盖了创建服务器、监听连接、接收和发送消息,以及管理多个客户端连接等基本功能。 你可以根据自己的需求扩展此代码,例如添加用户认证、数据加密等功能,构建更复杂的网络应用程序。
原文地址: http://www.cveoy.top/t/topic/cVfE 著作权归作者所有。请勿转载和采集!