C#でHTTPサーバを作るのはすごく簡単、
HttpListener listener = new HttpListener(); listener.Prefixes.Add("http://*:8000/"); //ポート番号は好みで。80でもOK listener.Start(); while (true) { HttpListenerResponse response = listener.GetContext().Response; response.OutputStream.Write(data, 0, (int)data.Length); //ここで何かdataを出力する response.Close(); }
のようなコードだけで出来てしまいます。
しかし、これだとWindows Vista / 7 のUAC有効環境で、HttpListenerExceptionが発生します。
Windowsファイアウォールを無効にしても結果は変わりません。
UAC有効の状態では、通常権限のプログラムは、localhost以外からの接続を受け付けられないようです。
そもそもテストやミニプログラム以外でHttpListenerを使うか疑問が大きいので、手抜きで安直な解決方法を探ってみます。
localhostに限定
ローカルでテストする分には、
listener.Prefixes.Add("http://localhost:8000");
のようにすればとりあえず動きます。
管理者権限にする
localhost以外からも接続させたいなら、管理者権限で動かしてしまうのが簡単です。
Visual Studioを起動する際に管理者権限にしておけば、デバッグで起動するプログラムも管理者権限になるので、例外は発生しなくなります。