2012-05-16 271 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堆棧,你不想這樣做... –