2015-11-06 41 views
6

C#でユニバーサルWindowsプラットフォームアプリケーションとしてWebサーバーを作成しています。私はこのアドレスを使用してサーバに接続してみましたC#でWebサーバーを作成するUWP

sealed partial class App : Application 
    { 
     int port = 8000; 

     /// <summary> 
     /// Initializes the singleton application object. This is the first line of authored code 
     /// executed, and as such is the logical equivalent of main() or WinMain(). 
     /// </summary> 
     public App() 
     { 
      StartServer(); 
     } 

     private void StartServer() 
     { 
      StreamSocketListener listener = new StreamSocketListener(); 
      listener.BindServiceNameAsync(port.ToString()); 
      Debug.WriteLine("Bound to port: " + port.ToString()); 
      listener.ConnectionReceived += async (s, e) => 
       { 
        Debug.WriteLine("Got connection"); 
        using (IInputStream input = e.Socket.InputStream) 
        { 
         var buffer = new Windows.Storage.Streams.Buffer(2); 
         await input.ReadAsync(buffer, buffer.Capacity, InputStreamOptions.Partial);  
        } 

        using (IOutputStream output = e.Socket.OutputStream) 
        { 
         using (Stream response = output.AsStreamForWrite()) 
         { 
          response.Write(Encoding.ASCII.GetBytes("Hello, World!"), 0, 1); 
         } 
        } 
       }; 
     } 
    } 

http://127.0.0.1:8000/C:/pathtohtmlfile/htmlfile.html

ただし、接続がタイムアウトここで、これまでに私のコードです。私はそれがC#コードや他の何かに問題があるかどうかはわかりません。

+0

あなたはこれを見ましたか:http://loopback.codeplex.com/? WinRTおよびUWPアプリケーションにループバック保護があり、指定されたアプリケーションのためにツールによって削除されます。多分、これはあなたが必要とするものです。 – Rafael

+0

ループバック例外は残念ながらクライアントソケット用です –

答えて

5

あなたはこれらの事を確認してください、UWPアプリでサーバーをホストする場合:

    このコード(デバイスA)と、デバイスを実行
  1. お使いのデバイスどのWebブラウザの実行(デバイスB)必要で同じLAN。また、デバイスAのブラウザを使用してサービスにアクセスすることはできません。
  2. あなたのサービスにアクセスするにはWIFIを使用してください。
  3. あなたのアプリは稼働状態である必要があります。
  4. あなたはIPアドレスを取得するためのメソッドを記述ではなく、127.0.0.1ください。

    public static string FindIPAddress() 
    { 
        List<string> ipAddresses = new List<string>(); 
        var hostnames = NetworkInformation.GetHostNames(); 
        foreach (var hn in hostnames) 
        { 
         //IanaInterfaceType == 71 => Wifi 
         //IanaInterfaceType == 6 => Ethernet (Emulator) 
         if (hn.IPInformation != null && 
          (hn.IPInformation.NetworkAdapter.IanaInterfaceType == 71 
          || hn.IPInformation.NetworkAdapter.IanaInterfaceType == 6)) 
         { 
          string ipAddress = hn.DisplayName; 
          ipAddresses.Add(ipAddress); 
         } 
        } 
    
        if (ipAddresses.Count < 1) 
        { 
         return null; 
        } 
        else if (ipAddresses.Count == 1) 
        { 
         return ipAddresses[0]; 
        } 
        else 
        { 
         return ipAddresses[ipAddresses.Count - 1]; 
        } 
    } 
    

    誰かが投票ダウン疑問を与えた理由を私は知らない、それは上のWebサービスをホストすることが可能です携帯電話/タブレット、もちろんはい。

+0

WinRTでWebサービスをホストする方法の例はありますか?私が見つけたものはまったく動作しません – CodeNoob

+0

「else if」「else else」は意味がありません;-D –

4

レイモンドズオの解決策が実際に機能します。しかし、忘れてはならない主なものはPackages.appxmanifestの機能です。

<Capability Name="privateNetworkClientServer" /> 

を、公衆ネットワーク内のサーバを実行するために:プライベートネットワーク内のサーバを実行するために、1つは、追加する必要があり

<Capability Name="internetClientServer" /> 
1

ウィンドウユニバーサルでWebサービスをホストすることが可能ですApp。私はhttp://www.dzhang.com/blog/2012/09/18/a-simple-in-process-http-server-for-windows-8-metro-appsの例を続け、Raymond Zuoの解決策の3つの最初のステップに続き、最後にファイアウォールも設置しました。残念なことに、私はここから回答をたどったにもかかわらず、ローカルホスト上で実行することができませんでしたCannot connect to localhost in windows store application。私は現在、Universal Platform Appへのjava httpリクエストを行っています。間違いなく、サーバーとクライアントは異なるホスト上で実行する必要があるようです。

関連する問題