实现一个80 http端口监听器

时间:2012-05-16 12:34:29

标签: c# http sockets desktop-application

我想实现类似于Fiddler的功能。

我尝试了两种解决方案:

HttpListener

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这样的类,因为它是更高级别而不是像socket这样的低级类,我必须实现HTTP协议。

2 个答案:

答案 0 :(得分:1)

这意味着其他人正在侦听端口80.您必须先退出该应用程序才能使用。

答案 1 :(得分:1)

  

那么Fiddler如何在没有这些问题的情况下收听端口80?

Fiddler不接受端口80上的传入连接 - 它充当传出 HTTP连接的代理。其他一些应用程序正在您的计算机上使用端口80,因此它被阻止使用,因为在给定端口上只能有一个侦听器(在这种情况下,您在注释中提到了IIS)。