如何用C#的Socket创建一个小型Web Server

来源:站长论坛作者:星宫一花头衔:网络博主
导读:本期聚焦于小伙伴创作的《如何用C#的Socket创建一个小型Web Server》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何用C#的Socket创建一个小型Web Server》有用,将其分享出去将是对创作者最好的鼓励。

用C#的Socket创建小型Web Server,核心是通过Socket监听指定端口,接收客户端的HTTP请求,解析请求内容后返回对应的HTTP响应。整个过程不需要依赖第三方Web框架,能帮助我们更清晰地理解HTTP协议和Socket通信的基本逻辑。

如何用C#的Socket创建一个小型Web Server

核心实现步骤

1. 初始化Socket并监听端口

首先需要创建一个Socket实例,绑定到指定的IP和端口,然后开启监听,等待客户端连接。这里选择使用TCP协议,因为HTTP协议是基于TCP的应用层协议。

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;

namespace SimpleWebServer
{
    class Program
    {
        static void Main(string[] args)
        {
            // 创建Socket实例,使用IPv4、流类型、TCP协议
            Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            // 绑定到本地所有IP的8080端口
            IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, 8080);
            serverSocket.Bind(endPoint);
            // 开始监听,最大等待连接数为10
            serverSocket.Listen(10);
            Console.WriteLine("Web Server已启动,监听端口8080...");
            
            // 循环接收客户端连接
            while (true)
            {
                Socket clientSocket = serverSocket.Accept();
                // 开启新线程处理客户端请求,避免阻塞主线程
                Thread thread = new Thread(HandleClient);
                thread.Start(clientSocket);
            }
        }
    }
}

2. 处理客户端请求并构造响应

当客户端连接到Socket后,需要读取客户端发送的HTTP请求内容,解析请求的方法和路径,然后构造对应的HTTP响应返回给客户端。HTTP响应的格式需要符合协议规范,包含状态行、响应头和响应体。

static void HandleClient(object obj)
{
    Socket clientSocket = (Socket)obj;
    try
    {
        // 接收客户端请求数据
        byte[] buffer = new byte[1024 * 1024];
        int length = clientSocket.Receive(buffer);
        string requestStr = Encoding.UTF8.GetString(buffer, 0, length);
        Console.WriteLine("收到请求:");
        Console.WriteLine(requestStr);
        
        // 简单解析请求路径,默认返回index.html内容
        string responseBody = "<html><body><h1>欢迎访问小型Web Server</h1><p>这是通过C# Socket搭建的服务器返回的内容</p></body></html>";
        string responseStr = "HTTP/1.1 200 OK\r\n" +
                            "Content-Type: text/html; charset=utf-8\r\n" +
                            $"Content-Length: {Encoding.UTF8.GetByteCount(responseBody)}\r\n" +
                            "\r\n" +
                            responseBody;
        
        // 发送响应给客户端
        byte[] responseBytes = Encoding.UTF8.GetBytes(responseStr);
        clientSocket.Send(responseBytes);
    }
    catch (Exception ex)
    {
        Console.WriteLine($"处理请求出错:{ex.Message}");
    }
    finally
    {
        // 关闭客户端Socket
        clientSocket.Shutdown(SocketShutdown.Both);
        clientSocket.Close();
    }
}

代码说明

上述代码中,Socket.Listen方法用于开启端口监听,Socket.Accept方法会阻塞等待客户端连接,当有连接进来时返回对应的客户端Socket。处理请求时,我们先接收客户端发送的字节数据,转成字符串后可以解析HTTP请求行的路径等信息,这里为了简化直接返回固定的HTML内容。

HTTP响应的格式必须正确,状态行HTTP/1.1 200 OK表示请求处理成功,Content-Type指定响应内容的类型,Content-Length指定响应体的字节长度,响应头和响应体之间需要通过\r\n分隔。

测试运行

将代码编译运行后,打开浏览器访问http://127.0.0.1:8080,就可以看到返回的HTML页面内容。如果需要支持更多请求路径或者静态文件访问,可以在解析请求路径的部分扩展逻辑,根据路径读取对应的文件内容作为响应体返回。

这个小型Web Server目前只支持非常基础的GET请求处理,没有考虑并发性能优化、异常处理完善等问题,仅作为Socket和HTTP协议结合的基础示例,开发者可以在此基础上根据需求扩展功能。

C#SocketWeb_ServerHTTP修改时间:2026-06-07 00:54:26

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。