csharp,using System;,using System.Net;,using System.Net.Sockets;,using System.Text;class Program,{, static void Main(), {, IPAddress ip = IPAddress.Parse("127.0.0.1");, int port = 8080;, TcpListener server = new TcpListener(ip, port);, server.Start();, Console.WriteLine("Server started..."); while (true), {, TcpClient client = server.AcceptTcpClient();, NetworkStream stream = client.GetStream();, byte[] buffer = new byte[1024];, int bytesRead = stream.Read(buffer, 0, buffer.Length);, string request = Encoding.UTF8.GetString(buffer, 0, bytesRead);, Console.WriteLine("Received: " + request); string response = "Hello from server";, byte[] responseBytes = Encoding.UTF8.GetBytes(response);, stream.Write(responseBytes, 0, responseBytes.Length); client.Close();, }, },},
“
using System; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; class SocketServer { static void Main(string[] args) { // 创建IPEndPoint对象,绑定到本地端口 IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Any, 5000); // 创建Socket对象 Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); try { // 绑定Socket到本地端口 listener.Bind(localEndPoint); // 开始监听,允许最多10个等待连接的客户端 listener.Listen(10); Console.WriteLine("服务器已启动,等待客户端连接..."); while (true) { // 接受客户端连接 Socket handler = listener.Accept(); string clientAddress = handler.RemoteEndPoint.ToString(); Console.WriteLine("客户端 {0} 已连接", clientAddress); // 创建线程处理客户端请求 Thread clientThread = new Thread(() => HandleClientComm(handler, clientAddress)); clientThread.Start(); } } catch (Exception e) { Console.WriteLine(e.ToString()); } } public static void HandleClientComm(Socket handler, string clientAddress) { try { byte[] buffer = new byte[1024]; int bytesRead; // 循环接收数据 while ((bytesRead = handler.Receive(buffer)) != 0) { string dataReceived = Encoding.UTF8.GetString(buffer, 0, bytesRead); Console.WriteLine("来自客户端 {0} 的数据: {1}", clientAddress, dataReceived); // 回显数据给客户端 byte[] msg = Encoding.UTF8.GetBytes(dataReceived); handler.Send(msg, 0, msg.Length); } } catch (Exception ex) { Console.WriteLine("与客户端 {0} 的连接出现异常: {1}", clientAddress, ex.Message); } finally { // 关闭Socket连接 handler.Shutdown(SocketShutdown.Both); handler.Close(); } } }
创建和绑定Socket:首先创建一个IPEndPoint
实例来指定服务器监听的IP地址和端口号(这里使用IPAddress.Any
表示监听所有可用的网络接口上的指定端口),然后创建一个Socket
对象,并将其绑定到之前创建的IPEndPoint
,最后调用Listen
方法开始监听客户端连接,参数10
表示允许最多有10个等待连接的客户端。
接受客户端连接:在无限循环中,使用Accept
方法接受客户端连接,每当有客户端连接时,会返回一个新的Socket
对象用于与该客户端通信,同时获取客户端的远程端点信息并打印出来。
处理客户端通信:为每个客户端连接创建一个新的线程,在新线程中调用HandleClientComm
方法来处理与该客户端的通信,在该方法中,通过循环使用Receive
方法接收客户端发送的数据,并将其转换为字符串打印出来,然后将接收到的数据原样发送回客户端实现回显功能,当接收到的数据长度为0时,表示客户端已关闭连接,退出循环并关闭与该客户端的Socket连接。
Q:如何修改服务器监听的端口号?
A:可以在创建IPEndPoint
对象时,将端口号5000
修改为你想要监听的其他端口号,例如8080
,即new IPEndPoint(IPAddress.Any, 8080)
,但要注意,一些端口号可能被系统或其他应用程序占用,需要选择未被占用的端口号。
Q:如何处理多个客户端并发连接和通信?
A:如上述代码所示,为每个客户端连接创建一个新的线程来处理其通信是一种常见的方式,这样可以保证每个客户端的请求都能得到及时处理,实现并发通信,也可以使用异步编程模型(如async
和await
关键字)来处理并发连接和通信,提高服务器的性能和响应能力。
就是一个简单的C# Socket服务器端代码示例及其相关说明,通过这个示例,你可以了解到如何使用C#编写一个基本的Socket服务器程序,实现与客户端的通信,在实际开发中,你可能需要根据具体的需求对代码进行进一步的扩展和优化,例如添加异常处理、支持更多的协议和功能等,希望这个示例对你有所帮助!