基于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技术站