0

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

我尝试了 2 个解决方案:

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

4

2 回答 2

1

这意味着其他东西正在端口 80 上侦听。您必须先退出该应用程序,然后您的应用程序才能工作。

于 2012-05-16T12:36:22.570 回答
1

那么Fiddler如何监听80端口没有这些问题呢?

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

于 2012-05-16T12:41:39.027 回答