C# 中的自定义 http 侦听器
本文关键字:http 侦听器 自定义 | 更新日期: 2023-09-27 17:57:17
.NET有一个内置的HttpListener类,但是我想知道如何推出自己的Http Listener。我知道这有很多影响,但我只想看到浏览器和我自己的应用程序相互交互。
这是我到目前为止编写的代码:
Socket servSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
servSocket.ExclusiveAddressUse = false; // Does this matter?
servSocket.Bind(new IPEndPoint(IPAddress.Any, 8080));
servSocket.Listen(10);
byte[] buffer;
do
{
try
{
Socket clientSocket = servSocket.Accept();
Console.WriteLine("Received Request at: {0}.", DateTime.Now);
EndPoint remoteEP = clientSocket.RemoteEndPoint;
buffer = new byte[1024];
clientSocket.ReceiveFrom(buffer, SocketFlags.None, ref remoteEP);
string request = Encoding.UTF8.GetString(buffer);
System.Diagnostics.Trace.Write(request);
buffer = Encoding.UTF8.GetBytes("<html><head><link rel='"icon'" href='"data:;base64,='"></head><body></body></html>");
clientSocket.Send(buffer);
clientSocket.Close();
clientSocket.Dispose();
}
catch { }
}
while (this.isRunning);
这种工作,但是我注意到的两个问题是,clientSocket
本地端点与servSocket
位于同一端口上。使用内置的 HttpListener,请求由随机本地端点端口处理。我该如何模仿这个?
我已将 ExclusiveAddressUse
标志设置为 false,但是我仍然无法将多个套接字绑定到该特定端点,那么它的确切用途是什么?
此外,我不时收到一个套接字异常,上面写着"主机中的软件中止了已建立的连接"。问题的根源可能是什么?
简单的答案是"你并不真正关心这个"。
TCP 的工作原理是稳定双向"虚拟"持久连接。为了实现这种错觉,它使用单独的端口与给定客户端进行通信。您仍然连接到端口 80(例如),但一千个客户端使用一千个不同的端口与服务器进行实际通信。
ExclusiveAddressUse
允许您将更多套接字绑定到同一端口 - 但每个套接字都必须有自己的 IP 地址。
网络很难。我们尽可能高的抽象,无论是TcpListener,HttpListener甚至OWIN。