当前位置:首页 > 行业动态 > 正文

如何使用C构建一个简单的服务器?

### C#实现简易服务器:该服务器基于C#语言开发,具备基本功能,如监听端口、接收和发送数据等,为网络编程初学者提供了学习和实践的基础。

在C#中创建一个简单的服务器,通常可以使用TcpListener或HttpListener类来实现,以下是使用这两种方式分别创建简单服务器的示例代码:

如何使用C构建一个简单的服务器?  第1张

使用TcpListener创建TCP服务器

1、引入命名空间

using System;

using System.Net;

using System.Net.Sockets;

using System.Text;

using System.Threading;

2、创建服务器代码

“`csharp

class Program

{

static void Main(string[] args)

{

TcpListener server = null;

try

{

// 设置本地终端的相关属性

IPAddress ipAddress = IPAddress.Parse("127.0.0.1");

int port = 12345;

server = new TcpListener(ipAddress, port);

// 开始监听是否有客户端连接

server.Start();

Console.WriteLine("等待客户端连接…");

while (true)

{

// 接受一个客户端的连接请求并返回一个新的socket实例

Socket client = server.AcceptSocket();

Console.WriteLine("一个客户端已连接!");

// 创建线程处理客户端请求

Thread clientThread = new Thread(new ParameterizedThreadStart(HandleClientComm));

clientThread.Start(client);

}

}

catch (SocketException e)

{

Console.WriteLine("SocketException: {0}", e);

}

finally

{

// 停止监听

server.Stop();

}

}

private static void HandleClientComm(object obj)

{

Socket client = (Socket)obj;

StringBuilder sb = new StringBuilder();

byte[] buffer = new byte[1024];

int iReceivedBytes;

while ((iReceivedBytes = client.Receive(buffer)) > 0)

{

// 将接收到的字节数组转换为字符串并添加到StringBuilder对象中

sb.Append(Encoding.UTF8.GetString(buffer, 0, iReceivedBytes));

}

string receivedString = sb.ToString();

Console.WriteLine("收到来自客户端的消息:" + receivedString);

string sendStr = "你好,客户端!";

byte[] sendData = Encoding.UTF8.GetBytes(sendStr);

client.Send(sendData, 0, sendData.Length, SocketFlags.None);

// 关闭客户端套接字

client.Shutdown(SocketShutdown.Both);

client.Close();

}

}

   上述代码创建了一个TCP服务器,监听本机的12345端口,当有客户端连接时,会为每个客户端创建一个新线程来处理通信,服务器接收客户端发送的消息并回复“你好,客户端!”。
使用HttpListener创建HTTP服务器
1、引入命名空间
   using System;
   using System.Net;
   using System.Text;
   using System.Threading;
   using System.Web;
2、创建服务器代码
   ```csharp
     class Program
     {
         static void Main(string[] args)
         {
             HttpListener listener = new HttpListener();
             listener.Prefixes.Add("http://localhost:8080/");
             listener.Start();
             Console.WriteLine("服务器启动,监听 http://localhost:8080/");
             while (true)
             {
                 HttpListenerContext context = listener.GetContext();
                 HttpListenerRequest request = context.Request;
                 HttpListenerResponse response = context.Response;
                 // 获取请求的URL和查询字符串参数
                 string url = request.RawUrl;
                 string queryString = request.Url.Query;
                 // 构建响应内容
                 string responseString = "Hello, this is a simple HTTP server!";
                 byte[] buffer = System.Text.Encoding.UTF8.GetBytes(responseString);
                 response.ContentType = "text/plain";
                 response.ContentLength64 = buffer.Length;
                 System.IO.Stream output = response.OutputStream;
                 output.Write(buffer, 0, buffer.Length);
                 output.Close();
             }
         }
     }

这段代码创建了一个简单的HTTP服务器,监听本地的8080端口,当接收到客户端请求时,服务器会返回一段简单的文本响应“Hello, this is a simple HTTP server!”。

相关问答FAQs

1、问:TcpListener和HttpListener创建的服务器有什么区别?

:TcpListener创建的是TCP服务器,基于TCP协议进行数据传输,适用于需要持续连接、双向通信的场景,如即时通讯、远程控制等,而HttpListener创建的是HTTP服务器,基于HTTP协议,主要用于处理Web请求,如提供网页内容、处理表单提交等,通常是无状态的,客户端和服务器之间的通信是一次性的。

2、问:如何让创建的服务器能够处理多个客户端的同时连接?

:对于TcpListener创建的TCP服务器,通过为每个接入的客户端连接创建一个新的线程(如上述代码中的Thread clientThread = new Thread(new ParameterizedThreadStart(HandleClientComm));)来处理该客户端的请求,从而实现同时处理多个客户端连接,对于HttpListener创建的HTTP服务器,由于其本身是基于多线程模型设计的,可以自然地处理多个并发的HTTP请求,无需额外创建线程来处理每个请求。

0