2012-03-18 21 views
3

httplistenerを作成したが、これは接頭辞としてlocalhostでのみ動作する。リモートサーバーに変更するとエラーが表示されます。ここでリモートホストの場合はC#httplistenerエラー

はコードです:

HttpListener listener = new HttpListener(); 
     listener.Prefixes.Add("http://*:8080/"); // I need localhost replaced with remote ip 
     listener.Start(); 
     while (true) 
     { 
      // Wait for a client request: 
      HttpListenerContext context = listener.GetContext(); 

      // Respond to the request: 
      string msg = "You asked for: " + context.Request.RawUrl; 
      context.Response.ContentLength64 = Encoding.UTF8.GetByteCount(msg); 
      context.Response.StatusCode = (int)HttpStatusCode.OK; 

      using (Stream s = context.Response.OutputStream) 
      using (StreamWriter writer = new StreamWriter(s)) 
       writer.Write(msg); 
     } 
     listener.Stop(); 

これは、Webクライアントです:

using (WebClient wc = new WebClient())  // Make a client request. 
        wc.DownloadString 
         ("http://"my public ip"(on my router):8080/lg.txt"); //port forwarding is set 
       MessageBox.Show("received"); 

それは私が私のローカルIP に任意のアイデアを、 "私のパブリックIP" を変更する場合にのみ機能しますか?

+2

"リモートサーバーIP" - 誰にリモート?それはサーバにローカルでなければなりません... –

+0

@Marcは私の公衆IPアドレス – Igor

答えて

2

Windowsファイアウォールはオンですか?それを無効にして、それが役立つかどうか確認してください。ローカルサービスリストのWindowsファイアウォールサービスを実際に無効にする必要があります。

+0

を意味しました。ファイアウォールの除外ルールをプログラムで追加する方法はありますか? – Igor

+0

私が知っているわけではありません...私はこれがかなり大きなセキュリティ上の脆弱性であると考えています(プログラムがファイアウォールルールを追加する可能性があります - 悪意のあるプログラムがコンピュータを世界中に開放する可能性があります)。 – MattW

1

まず、ファイアウォールを確認します。しかし、http.sysはHttpListenerで使用されている可能性があります。プレフィックスを "netsh"を介してアカウントで使用できるようにする必要があります。昇格した管理者アカウントで簡単に実行して確認できます。正常に動作している場合は、おそらくhttp.sys権限の問題です。

+1

ファイアウォールです。 – Igor

関連する問題