[英]implement a 80 http port listener
我想实现类似于 Fiddler 的功能。
我尝试了两种解决方案:
监听器
HttpListener listener = new HttpListener();
listener.Prefixes.Add("http://*:80/");
listener.Start();
执行Start()
出现错误:
System.Net.HttpListenerException“进程无法访问该文件,因为它正被另一个进程使用”
这意味着还有一些其他应用程序在侦听端口 80,可能是 IIS 或其他什么。
插座
IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName());
IPAddress ipAddress = ipHostInfo.AddressList[0];
IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 80);
// Create a TCP/IP socket.
Socket listener = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
// Bind the socket to the local endpoint and listen for incoming connections.
try
{
listener.Bind(localEndPoint);
// .....
当listener.Bind()
被执行时,我得到:
System.Net.Sockets.SocketException (0x80004005):通常每个套接字地址(协议/网络地址/端口)只允许使用一次
这意味着同样的事情,已经有另一个应用程序在监听端口 80。
那么 Fiddler 如何监听 80 端口而没有这些问题呢? 我更喜欢使用像 HttpListener 这样的类,因为它是更高级别的,而不是像套接字这样的低级别类,我必须在其中实现 HTTP 协议。
这意味着其他东西正在侦听端口 80。您必须先退出该应用程序,然后您的应用程序才能工作。
那么 Fiddler 如何监听 80 端口而没有这些问题呢?
Fiddler 不接受端口 80 上的传入连接 - 它充当传出HTTP 连接的代理。 一些其他应用程序正在您的机器上使用端口 80,因此它被阻止使用,因为给定端口上只能有一个侦听器(在本例中为您在评论中提到的 IIS)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.