2012-03-16 24 views
4

System.Net.HTTPListenerを使用して単純なHTTPサーバーを作成しようとしましたが、ネットワーク内の他のコンピュータからの接続を受け取りません。例コード:HTTPListenerがネットワーク上で動作しません

class HTTPServer 
{ 
    private HttpListener listener; 
    public HTTPServer() { } 
    public bool Start() 
    { 
     listener = new HttpListener(); 
     listener.Prefixes.Add("http://+:80/"); 
     listener.Start(); 
     listener.BeginGetContext(new AsyncCallback(ListenerCallback), listener); 
     return true; 
    } 
    private static void ListenerCallback(IAsyncResult result) 
    { 
     HttpListener listener = (HttpListener)result.AsyncState; 
     listener.BeginGetContext(new AsyncCallback(ListenerCallback), listener); 
     Console.WriteLine("New request."); 

     HttpListenerContext context = listener.EndGetContext(result); 
     HttpListenerRequest request = context.Request; 
     HttpListenerResponse response = context.Response; 

     byte[] page = Encoding.UTF8.GetBytes("Test"); 

     response.ContentLength64 = page.Length; 
     Stream output = response.OutputStream; 
     output.Write(page, 0, page.Length); 
     output.Close(); 
    } 
} 
class Program 
{ 
    static void Main(string[] args) 
    { 
     HTTPServer test = new HTTPServer(); 
     test.Start(); 
     while (true) ; 
    } 
} 

このコードに問題がありますか、別の問題がありますか?

私は管理者権限でアプリケーションを実行しようとしましたが、別のコンピュータのコンピュータのIPアドレス(192.168.1.100)を参照すると、その要求は受信されません。アプリケーションが実行されている場所(「localhost」、「127.0.0.1」および「192.168.1.100」を使用)と同じコンピュータから要求が送信された場合、サーバーは正常に動作します。ピンポングがうまくいきます。私もnginxを試しましたが、これはネットワーク上で完全に動作します。

HTTPListenerを軽量サーバーとして使用して、一部の動的initパラメータclientaccesspolicy.xmlと単純なモバイルHTMLページを含むSilverlight XAPファイルを含むWebページを配信しています。

答えて

18

ファイアウォール         

+1

あなたはそうです。それは私の馬鹿げたものだった。私は、ファイアウォールが問題ではないという管理者特権でアプリケーションが実行されていることを前提としていました。そして、奇妙なことに、Windowsファイアウォールからプログラムをブロックするか許可するかは決して受け取りませんでした。有難う御座います。 – user1273708

+8

これは最短の答えの賞やバッジにも勝つはずですが、それでも目標に挑戦してください:) – V4Vendetta

+10

ハ!私は長さにそれを得るために非改行スペースでそれを埋めなければならなかった! – spender

0

私はまた、ファイアウォールの最初思いました。しかし、私のエンドポイント問題:チュートリアルから

は、私は、次の

String[] endpoints = new String[] { 
    "http://localhost:8080/do_something/", 
    // ... 
}; 

このコードは、ローカルでのみとだけあなたはlocalhostを使用している場合に動作のようなコードを持っていました。 IPを使用できるようにするために、私は

String[] endpoints = new String[] { 
    "http://127.0.0.1:8080/do_something/", 
    // ... 
}; 

にIPアドレスによって要求が働いていたこの時間は、それを変更しましたが、サーバーは、別のIPからのリモート要求に応答しませんでした。どのような私のために働いて私を得たことは代わりにローカルホストと127.0.0.1の星(*)を使用することだったので、次のコードは:私が行ったように、誰かがこのポスト時につまずく場合

String[] endpoints = new String[] { 
    "http://*:8080/do_something/", 
    // ... 
}; 

ちょうどここにこれを残します。

関連する問題