2017-05-22 24 views
1

HoloLens、UWPアプリケーションが接続してデータを送信できるようにサーバーを作成します。UWPクライアントアプリケーションからエラーが発生してサーバークラッシュにデータが送信されるSystem.Runtime.InteropServices.COMException(0x8007274D)

ようにサーバーを作成するために、私はVisual Studioでコンソールアプリケーションを作成し、例にhere

を踏襲し、クライアント側から、UWPアプリケーション、私は以下のクラスを作成しました:私は

using UnityEngine; 
#if !UNITY_EDITOR && UNITY_METRO 
using System; 
using System.Text; 
using System.Collections; 
using System.Collections.Generic; 
using Windows.Networking.Sockets; 
using Windows.Storage.Streams; 
using Windows.Networking; 
using Windows.Foundation; 
#endif 

public class SendSocketStreamClient { 
    // The port number for the remote device. 
    private int port; 
    private string serverIP; 

    public SendSocketStreamClient(int portNum, string ip){ 
     port = portNum; 
     serverIP = ip; 
    } 

#if !UNITY_EDITOR && UNITY_METRO 
    private StreamSocket networkConnection; 

    // The response from the remote device. 
    private static String response = String.Empty; 

    public void StartClient() 
    { 
     // Setup a connection to the server. 
     HostName networkHost = new HostName(serverIP); 
     networkConnection = new StreamSocket(); 

     IAsyncAction outstandingAction = networkConnection.ConnectAsync(networkHost, port.ToString()); 
     AsyncActionCompletedHandler aach = new AsyncActionCompletedHandler(NetworkConnectedHandler); 
     outstandingAction.Completed = aach; 
    } 

    public void NetworkConnectedHandler(IAsyncAction asyncInfo, AsyncStatus status) 
    { 
     // Status completed is successful. 
     if (status == AsyncStatus.Completed) 
     { 
      DataWriter networkDataWriter; 

      // Since we are connected, we can send the data we set aside when establishing the connection. 
      using (networkDataWriter = new DataWriter(networkConnection.OutputStream)) 
      { 

       networkDataWriter.WriteBytes(Encoding.ASCII.GetBytes("Sending Trial 1")); 

       // Again, this is an async operation, so we'll set a callback. 
       DataWriterStoreOperation dswo = networkDataWriter.StoreAsync(); 
       dswo.Completed = new AsyncOperationCompletedHandler<uint>(DataSentHandler); 
      } 
     } 
     else 
     { 
      // TODO resend 
      Debug.Log("Failed to establish connection. Error Code: " + asyncInfo.ErrorCode); 
      networkConnection.Dispose(); 
     } 
    } 

    public void DataSentHandler(IAsyncOperation<uint> operation, AsyncStatus status) 
    { 
     if (status == AsyncStatus.Error) 
     { 
      // didn't send, so requeue 
      Debug.Log("Error while sending " + operation.ErrorCode); 
     } 
     // Always disconnect here since we will reconnect when sending the next data. 
     networkConnection.Dispose(); 
    } 
#endif 
} 

をこのクラスをC#スクリプトで呼び出します。

#if !UNITY_EDITOR && UNITY_METRO 
     SendSocketStreamClient newClient = new SendSocketStreamClient(ConnectionPort, ServerIP.Trim()); 
     newClient.StartClient(); 
#endif 

ただし、私はいつも以下のエラーを受け取ります。

接続の確立に失敗しました。エラーコード:System.Runtime.InteropServices.COMException(0x8007274D):No ターゲットマシンが積極的に を拒否したため接続できませんでした。

私が間違ってやっていることや、HoloLensからサーバーにデータを送信する方法は何ですか?サーバーに何か問題がありますか?

-----編集----

は、接続の確立に失敗しました。エラーコード: System.Runtime.InteropServices.COMException(0x8007274C): 接続されたホストが応答に失敗したため、一定期間後に接続先が正しく応答しなかったため、接続が失敗しました。

127.0.0.1ではなく私のマシンのIPアドレスにserverIPを設定すると、エラーが上記に変更されました。だから私はそれが正しいIPアドレスを与えるこのエラーを解決したと思うが、今はサーバーに接続しません。

これは、サーバーを作成した方法が正しくないことを意味しますか?

+0

すべてのUWPアプリケーションに制限があるため、localhost(または127.0.0.1)の問題が発生します:https://stackoverflow.com/a/33263253/2259391 http://www.telerik.com/fiddlerはこれをデバッグするのに役立ちます(ループバックを可能にするツールもあります) –

+0

ありがとうございます。私はすでに問題を見つけました。 =) –

答えて

0

としては、上記のコメントで言ったとhereように私は、サーバーに、私は

IPAddress ipAddress = IPAddress.Loopback; 

代わりに私の問題を解決し、私がに接続することができました

IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName()); 
IPAddress ipAddress = ipHostInfo.AddressList[0]; 

変更する使用していことがわかりましたサーバーはHoloLensからデータを受信します。

関連する問題