基于C#实现一个最简单的HTTP服务器实例

基于C#实现一个最简单的HTTP服务器实例

介绍

HTTP服务器通常用于向客户端提供Web应用程序或网站的内容。本教程将演示如何使用C#构建一个最简单的HTTP服务器实例。

步骤

第一步:创建一个新的C#控制台应用程序

首先,打开Visual Studio并创建一个新的C#控制台应用程序。

第二步:创建HTTPServer类

我们需要创建一个名为HTTPServer的类,该类将托管HTTP连接并接收客户端请求。

class HTTPServer
{
    private readonly HttpListener listener;

    public HTTPServer(params string[] prefixes)
    {
        listener = new HttpListener();

        foreach (string prefix in prefixes)
            listener.Prefixes.Add(prefix);
    }

    public void Start()
    {
        listener.Start();

        while (true)
        {
            HttpListenerContext context = listener.GetContext();

            Process(context);
        }
    }

    public void Stop()
    {
        listener.Stop();
    }

    private void Process(HttpListenerContext context)
    {
        string responseString = "<html><body><h1>Hello, World</h1></body></html>";
        byte[] buffer = System.Text.Encoding.UTF8.GetBytes(responseString);

        context.Response.ContentLength64 = buffer.Length;
        context.Response.OutputStream.Write(buffer, 0, buffer.Length);

        context.Response.Close();
    }
}

第三步:使用HTTPServer类

创建一个新的控制台应用程序,使用以下代码启动HTTPServer实例。

static void Main(string[] args)
{
    HTTPServer server = new HTTPServer("http://localhost:8080/");
    server.Start();
}

第四步:测试HTTP服务器

使用你喜欢的Web浏览器或Postman等HTTP客户端向http://localhost:8080/发送请求,你应该会看到浏览器显示“Hello, World”。

GET / HTTP/1.1
Host: localhost:8080

示例

示例1:向客户端发送HTML文件

以下示例演示如何用StreamReader打开HTML文件,将HTML内容作为String发送回客户端。

private void Process(HttpListenerContext context)
{
    string filename = context.Request.Url.AbsolutePath;
    filename = filename.Substring(1);
    if (string.IsNullOrEmpty(filename))
        filename = "index.html";

    string path = Path.Combine(Environment.CurrentDirectory, "public", filename);
    if (!File.Exists(path))
    {
        context.Response.StatusCode = 404;
        context.Response.Close();
        return;
    }

    string content = File.ReadAllText(path);
    byte[] buffer = System.Text.Encoding.UTF8.GetBytes(content);

    context.Response.ContentLength64 = buffer.Length;
    context.Response.ContentType = "text/html";
    context.Response.OutputStream.Write(buffer, 0, buffer.Length);

    context.Response.Close();
}

示例2:将请求作为JSON响应输出

以下示例演示如何使用Newtonsoft.Json将请求对象转换为JSON字符串,并作为响应内容返回给客户端。

using Newtonsoft.Json;

class HTTPServer
{
    private readonly HttpListener listener;

    public HTTPServer(params string[] prefixes)
    {
        listener = new HttpListener();

        foreach (string prefix in prefixes)
            listener.Prefixes.Add(prefix);
    }

    public void Start()
    {
        listener.Start();

        while (true)
        {
            HttpListenerContext context = listener.GetContext();

            Process(context);
        }
    }

    public void Stop()
    {
        listener.Stop();
    }

    private void Process(HttpListenerContext context)
    {
        string json = JsonConvert.SerializeObject(context.Request);
        byte[] buffer = System.Text.Encoding.UTF8.GetBytes(json);

        context.Response.ContentLength64 = buffer.Length;
        context.Response.ContentType = "application/json";
        context.Response.OutputStream.Write(buffer, 0, buffer.Length);

        context.Response.Close();
    }
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于C#实现一个最简单的HTTP服务器实例 - Python技术站

(0)
上一篇 2023年6月7日
下一篇 2023年6月7日

相关文章

  • C#使用Post调用接口并传递json参数

    下面是关于“C#使用Post调用接口并传递json参数”的完整攻略: 1. 确定请求地址和请求方式 使用Post调用接口需要确定请求地址和请求方式。通常情况下,请求地址是指接口的URL,请求方式是指HTTP请求的方式,即”GET”或”POST”。 2. 导入必要的命名空间 在进行Post调用接口时,需要导入以下两个命名空间: using System.Net…

    C# 2023年5月31日
    00
  • 数据库 数据类型float到C#类型decimal, float数据类型转化无效

    问题描述: 在将数据库中的float数据类型转换成C#的decimal类型时,有些数据会发生转化无效的情况。这是由于float数据类型的精度问题所导致的。本文将详细介绍如何解决这个问题,并提供两个演示示例。 解决步骤: 1.使用double类型进行过渡转换 当我们将数据库中的float类型转化成decimal类型时,可以使用double类型作为过渡类型。这是…

    C# 2023年5月15日
    00
  • .NET Core通过dotnet publish命令发布应用

    .NET Core通过dotnet publish命令发布应用的攻略 在.NET Core中,我们可以使用dotnet publish命令将应用程序发布为可执行文件或NuGet包。本攻略将详细介绍如何使用dotnet publish命令发布应用程序。 发布应用程序 我们可以通过以下步骤使用dotnet publish命令发布应用程序。 打开命令行窗口。 进入…

    C# 2023年5月16日
    00
  • C#实现字符串倒序的写法

    以下是“C#实现字符串倒序的写法”的完整攻略: 1. 使用内置函数 C#已经为字符串倒序提供了一个内置函数——Reverse(),可以直接操作字符数组,实现字符串倒序。下面是示例代码: using System; class Program { static void Main() { string str = "Hello, world!&quo…

    C# 2023年6月1日
    00
  • Spring.Net IOC依赖注入原理流程解析

    下面是对于“Spring.Net IOC依赖注入原理流程解析”的详细讲解: 1. 什么是IOC? IOC 全称是 Inversion of Control,即控制反转。 意思是将原本由程序员编码决定的对象间调用关系,通过外部配置文件描述,交由 Spring.Net 框架来管理和实现。 Spring.Net 提供的 IOC 叫做 Dependency Inje…

    C# 2023年6月3日
    00
  • .NET Core支持Cookie和JWT混合认证、授权的方法

    下面是详细讲解”.NET Core支持Cookie和JWT混合认证、授权的方法”的完整攻略: 概述 在.NET Core中使用Cookie和JWT混合认证可以相对轻松地完成网站的用户认证和授权。Cookie可以用于存储真实用户的身份,JWT则可以用于保持用户的登录状态。 步骤 步骤一:安装必要的NuGet包 在开始处理混合身份验证之前,我们需要安装Micro…

    C# 2023年6月3日
    00
  • 将Datatable转化成json发送前台实现思路

    将Datatable转化成json并发送到前端页面,通常可以分为以下几个步骤: 引入必要的库文件 在使用Datatable转化成json时,需要使用到jQuery库和Datatable插件,所以需要在页面中引入这两个文件。 <!– 引入jQuery库 –> <script src="https://cdn.bootcss.co…

    C# 2023年5月31日
    00
  • C# 定时器定时更新的简单实例

    C#定时器定时更新的简单实例 在C#中,我们可以使用定时器来定时执行某些操作。本文将介绍如何使用定时器定时更新,包括以下步骤: 创建WinForms应用程序 添加定时器控件 实现定时更新 1. 创建WinForms应用程序 首先,我们需要创建一个WinForms应用程序。可以使用Visual Studio创建一个新的WinForms应用程序。以下是具体步骤:…

    C# 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部