基于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日

相关文章

  • WPF实现页面的切换的示例代码

    下面是关于WPF实现页面切换的示例代码攻略。 一、背景介绍 WPF是微软所开发的客户端跨平台的界面框架,可以说是Winform的升级版。而WPF的一个有点就是可以方便地实现页面的切换,基本上要实现页面切换只要使用WPF自带的Frame控件即可。 二、示例代码 接下来就是详细讲解WPF实现页面切换的示例代码: 1. 示例1 第一步:在你的WPF窗口中加入一个F…

    C# 2023年6月3日
    00
  • C# Razor语法规则

    C# Razor语法规则是用于在ASP.NET Web应用程序中编写动态页面的一种语法规则。它允许在HTML页面中嵌入C#代码,以便在客户端浏览器中执行C#代码。下面是C# Razor语法规则的一些基本规则: 1. 嵌入C#代码 使用@符号来嵌入C#代码到HTML页面中。例如: <p>@DateTime.Now.ToString()</p&…

    C# 2023年5月14日
    00
  • C# 中实现ftp 图片上传功能(多快好省)

    下面是在C#中实现ftp图片上传功能的完整攻略。 1. 确定FTP服务器信息 在进行FTP图片上传之前,首先需要确定FTP服务器的相关信息,如FTP服务器的地址、端口、用户名、密码等。这些信息一般由FTP服务器的管理员提供,在使用FTP客户端工具时也需要输入。 2. 引入FTP操作组件 在C#中实现FTP操作,需要使用FTP操作组件。常用的FTP操作组件有F…

    C# 2023年5月15日
    00
  • C# 内部类与Lambda表达式用法详解

    下面是“C# 内部类与Lambda表达式用法详解”的完整攻略: 1. C# 内部类 1.1 什么是内部类 在 C# 中,内部类又叫嵌套类,是指一个类定义在另一个类的内部。内部类可以访问外部类的成员,而外部类也可以访问内部类的成员。内部类可以使用 private、public、protected 和 internal 等访问修饰符,一般来说,内部类的访问修饰符…

    C# 2023年6月1日
    00
  • C# 整数转二进制字符串方式

    C# 整数转二进制字符串方式 在 C# 中,可以通过下列方法将整数转换为二进制字符串。 方法一 – 转换为字符串 通过 Convert.ToString() 方法,以及使用二进制基数,将整数值转换为二进制字符串。 int number = 42; string binaryString = Convert.ToString(number, 2); Conso…

    C# 2023年6月8日
    00
  • csdn 博客中实现运行代码功能实现

    实现csdn博客中运行代码功能可以使用以下两种方法: 方法一:使用CSDN编辑器 登录CSDN博客后台,在编辑器的顶部菜单中点击“插入代码”按钮,或者输入“[[toc]]”快捷键,然后点击Code按钮插入代码框。 插入代码框中分别输入该段代码的语言和代码,可以选择开启行号选项和代码复制按钮选项。例如,输入以下Java代码: public class Hell…

    C# 2023年5月31日
    00
  • c# WPF如何实现滚动显示的TextBlock

    要实现滚动显示的TextBlock,可以使用WPF中的ScrollViewer和TextBlock结合使用。ScrollViewer是一个滚动视图容器,可以将其在需要滚动的控件周围包装起来,从而实现滚动效果。 下面是实现过程: 第一步:在XAML文件中,在需要滚动显示的TextBlock周围加入ScrollViewer容器,同时设置VerticalScrol…

    C# 2023年6月6日
    00
  • MVC4 基础 枚举生成 DropDownList 实用技巧

    下面是针对“MVC4 基础 枚举生成 DropDownList 实用技巧”的完整攻略。 标题 MVC4 基础 枚举生成 DropDownList 实用技巧 简介 在MVC应用程序中,我们经常需要使用枚举来表达状态信息,比如订单状态或者商品类型等等。而使用DropDownList列表来显示和选取这些枚举值,是一种非常常见和方便的做法。本文将介绍如何在MVC4中…

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