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):通常、各ソケットアドレス(プロトコル/ネットワークアドレス/ポート)の使用は1回のみ許可されます

これは同じことを意味します。ポート80でリッスンしている別のアプリケーションがすでに存在します。

では、Fiddlerはこれらの問題なしにポート80をどのようにリッスンしますか?HTTPプロトコルを実装する必要があるソケットのような低レベルのクラスではなく、高レベルであるため、HttpListenerのようなクラスを使用することをお勧めします。

4

2 に答える 2

1

これは、他の何かがポート80でリッスンしていることを意味します。アプリケーションが機能する前に、そのアプリケーションを終了する必要があります。

于 2012-05-16T12:36:22.570 に答える
1

では、Fiddlerはこれらの問題なしにポート80をどのようにリッスンしますか?

Fiddlerはポート80で着信接続を受け入れていません。これは、発信HTTP接続のプロキシとして機能しています。他のアプリケーションがマシンでポート80を使用しているため、特定のポート(この場合、コメントで言及しているようにIIS)にはリスナーが1つしかないため、使用がブロックされます。

于 2012-05-16T12:41:39.027 に答える