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アドレスを与えるこのエラーを解決したと思うが、今はサーバーに接続しません。
これは、サーバーを作成した方法が正しくないことを意味しますか?
すべてのUWPアプリケーションに制限があるため、localhost(または127.0.0.1)の問題が発生します:https://stackoverflow.com/a/33263253/2259391 http://www.telerik.com/fiddlerはこれをデバッグするのに役立ちます(ループバックを可能にするツールもあります) –
ありがとうございます。私はすでに問題を見つけました。 =) –