2012-05-16 278 views
0

我想实现类似于Fiddler的功能。实现一个80端口监听器

我曾尝试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

那么,如何提琴手侦听端口80没有这些问题呢? 我宁愿使用像HttpListener这样的类,因为它是更高级别的,而不是象套接字这样的低级别类,我必须实现HTTP协议。

回答

1

那么,如何提琴手侦听端口80没有这些问题呢?

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

+0

你说得对。我为传入连接编写代码。我想编写像Fiddler这样的传出连接的代码。你能给我一个线索怎么做吗? –

+0

关于如何在这个SO线程中创建一个代理的一些很好的信息,这应该让你开始:http://stackoverflow.com/questions/226784/how-to-create-a-simple-proxy-in-c – BrokenGlass

1

这意味着别的东西是侦听端口80.你必须退出该应用程序之前,你会工作。

+0

的Skype或本地Web服务器是该 –

+0

你不明白的罪魁祸首。是的,还有另一个应用程序可能是IIS。但提琴手的工作没有任何问题。我怎样才能做到呢? –

+0

提琴手取代TCP堆栈,你不想这样做... –