0


用 C# 自己动手编写一个 Web 服务器

在.NET世界中,C#是一种功能强大的编程语言,常被用于构建各种类型的应用程序,包括Web服务器。虽然在实际生产环境中,我们通常会使用成熟的Web服务器软件(如IIS、Kestrel等),但了解如何用C#从头开始构建一个简单的Web服务器,对于深入理解HTTP协议和网络编程是非常有价值的。

本文将指导你使用C#编写一个简单的Web服务器,并包含具体的代码实现。

第一步:理解HTTP协议

在编写Web服务器之前,我们需要对HTTP协议有一个基本的了解。HTTP是一种无状态的、基于请求和响应的协议。客户端(如Web浏览器)发送HTTP请求到服务器,服务器处理请求并返回HTTP响应。

HTTP请求由请求行、请求头部和请求体组成。请求行包含请求方法(GET、POST等)、请求URL和HTTP协议版本。请求头部包含关于请求的附加信息,如

Host

User-Agent

等。请求体包含实际发送给服务器的数据,通常用于POST请求。

HTTP响应由状态行、响应头部和响应体组成。状态行包含HTTP协议版本、状态码和状态消息。响应头部包含关于响应的附加信息,如

Content-Type

Content-Length

等。响应体包含服务器返回给客户端的实际数据。

第二步:创建TCP监听器

在C#中,我们可以使用

TcpListener

类来创建一个TCP监听器,用于监听传入的HTTP请求。以下是一个简单的示例代码,展示如何创建TCP监听器并等待连接:

usingSystem;usingSystem.IO;usingSystem.Net;usingSystem.Net.Sockets;usingSystem.Text;usingSystem.Threading.Tasks;classSimpleWebServer{privateconstint Port =8080;publicstaticvoidMain(){TcpListener listener =newTcpListener(IPAddress.Any, Port);
        listener.Start();
        Console.WriteLine($"Server started at http://localhost:{Port}/");while(true){TcpClient client = listener.AcceptTcpClient();HandleClientAsync(client).Wait();}}privatestaticasyncTaskHandleClientAsync(TcpClient client){NetworkStream stream = client.GetStream();StreamReader reader =newStreamReader(stream, Encoding.UTF8);StreamWriter writer =newStreamWriter(stream, Encoding.UTF8){ AutoFlush =true};try{// 读取请求行string requestLine =await reader.ReadLineAsync();if(string.IsNullOrEmpty(requestLine))return;

            Console.WriteLine($"Received request: {requestLine}");// 解析请求行(为了简化,这里只处理GET请求)string[] parts = requestLine.Split(' ');if(parts.Length !=3|| parts[0]!="GET"){SendErrorResponse(writer,400,"Bad Request");return;}string path = parts[1];if(path !="/"){SendErrorResponse(writer,404,"Not Found");return;}// 发送响应SendResponse(writer,200,"OK","<html><body><h1>Hello, World!</h1></body></html>");}catch(Exception ex){
            Console.WriteLine($"Error: {ex.Message}");SendErrorResponse(writer,500,"Internal Server Error");}finally{
            client.Close();}}privatestaticvoidSendResponse(StreamWriter writer,int statusCode,string statusMessage,string content){
        writer.WriteLine($"HTTP/1.1 {statusCode}{statusMessage}");
        writer.WriteLine("Content-Type: text/html; charset=UTF-8");
        writer.WriteLine($"Content-Length: {content.Length}");
        writer.WriteLine();
        writer.Write(content);}privatestaticvoidSendErrorResponse(StreamWriter writer,int statusCode,string statusMessage){string content =$"<html><body><h1>{statusCode}{statusMessage}</h1></body></html>";SendResponse(writer, statusCode, statusMessage, content);}}

这个示例代码创建了一个简单的Web服务器,监听

8080

端口。当客户端连接到服务器时,服务器会读取请求行,并根据请求路径返回相应的响应

标签: c# 前端 服务器

本文转载自: https://blog.csdn.net/weixin_44837958/article/details/136700489
版权归原作者 伴之则安博客 所有, 如有侵权,请联系我们删除。

“用 C# 自己动手编写一个 Web 服务器”的评论:

还没有评论