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のようなクラスを使用することをお勧めします。