2012-05-16 3 views
0

피들러와 비슷한 기능을 구현하고 싶습니다.80 http 포트 리스너 구현

나는이 개 솔루션을 시도 :

http-listener에

HttpListener listener = new HttpListener(); 
listener.Prefixes.Add("http://*:80/"); 
listener.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) 수 : 각 소켓 주소를 하나만 사용 (프로토콜을/network address/port)는 일반적으로 포트 80에서 수신 대기하는 다른 응용 프로그램과 동일한 것을 의미합니다.

따라서 Fiddler는 이러한 문제없이 포트 80을 어떻게 수신합니까? HTTP 프로토콜을 구현해야하는 소켓처럼 하위 수준 클래스 대신 상위 수준이기 때문에 HttpListener와 같은 클래스를 사용하는 것이 좋습니다.

답변

1

따라서 Fiddler는 이러한 문제없이 포트 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 또는 로컬 웹 서버는이 주된 범인입니다. –

+0

당신은 이해할 수 없습니다. 네, 아마 다른 응용 프로그램이 아마 IIS입니다. 그러나 Fiddler는 문제없이 작동합니다. 내가 어떻게 할 수 있니? –

+0

Fiddler가 TCP 스택을 대체합니다. 그럴 필요가 없습니다. –

관련 문제