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を起動する際に管理者権限にしておけば、デバッグで起動するプログラムも管理者権限になるので、例外は発生しなくなります。