HoloLens、UWP アプリがサーバーに接続してデータを送信できるように、サーバーを作成したいと考えています。
サーバーを作成するために、Visual Studio でコンソール アプリケーションを作成し、こちらの例に従いました。
クライアント側の 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): ターゲット コンピューターがアクティブに拒否したため、接続できませんでした。
私が間違っていることや、HoloLens からサーバーにデータを送信する方法について何か考えはありますか? サーバーに何か問題がありますか?
- - -編集 - -
接続の確立に失敗しました。エラー コード: System.Runtime.InteropServices.COMException (0x8007274C): 接続先が一定時間後に適切に応答しなかったため、接続の試行が失敗したか、接続されたホストが応答しなかったために確立された接続が失敗しました。
serverIP を 127.0.0.1 ではなく自分のマシンの IP アドレスに設定すると、エラーが上記のように変わりました。したがって、正しいIPアドレスを指定するとこのエラーは解決したと思いますが、サーバーに接続できなくなりました。
それは、サーバーの作成方法が正しくないということですか?