簡體   English   中英

無法從外部服務器讀取數據到Hololens

[英]Can't Read Data from external Server to Hololens

我已經寫了一些代碼將數據從外部服務器傳輸到Hololens。 我可以將Hololens連接到服務器。 但是我在將數據從服務器發送到Hololens時遇到了問題。 每當我調用ReadData函數時,它甚至都沒有連接(它顯示“未連接”)。

我對c#和Unity還是很陌生,還無法解決此問題。 我正在使用StreamSocket和DataReader類分別連接和讀取數據。 函數Connect()start()方法中與服務器連接,然后在update()方法中調用ReadData函數以在每一幀從服務器獲取數據。 我正在附加我的代碼文件。 您能幫我解決我的問題嗎?謝謝。

using System.Collections;  
using System.Collections.Generic;  
using System.Net.Sockets;  
using System.Threading;  
using System.Text;  
using System.Net;   
using System;  
using UnityEngine;  
#if !UNITY_EDITOR && UNITY_METRO
using Windows.Networking.Sockets;
using Windows.Storage.Streams;
using Windows.Networking;
using Windows.Foundation;
#endif
public class TCPclientRead : MonoBehaviour
{
    public string ServerIP = "10.1.2.35";


    [Tooltip("The connection port on the machine to use.")]
    public int ConnectionPort = 11000;

    private string data = "connected" ;

    public TextMesh mesh;
    private bool connected = false;

#if !UNITY_EDITOR && UNITY_METRO

  private StreamSocket networkConnection;

        /// <summary>
        /// Temporary buffer for the data we are recieving.
        /// </summary>
    //private byte[] dataBuffer;


    public void Connect( )
    {
          // Setup a connection to the server.
               HostName networkHost = new HostName(ServerIP.Trim());

              //HostName networkHost = new HostName( IPAddress.Any.ToString());    
              networkConnection = new StreamSocket();

            // Connections are asynchronous.  
            // !!! NOTE These do not arrive on the main Unity Thread. Most Unity operations will throw in the callback !!!
            IAsyncAction outstandingAction = networkConnection.ConnectAsync(networkHost, ConnectionPort.ToString());
            AsyncActionCompletedHandler aach = new AsyncActionCompletedHandler(NetworkConnectedHandler);
            outstandingAction.Completed = aach;    
    }

    public void NetworkConnectedHandler(IAsyncAction asyncInfo, AsyncStatus status)
    {
            if (status == AsyncStatus.Completed)
            {
                connected = true;
                 // Here Just display connected   

            }
            else
            {
                connected = false;    
                Debug.Log("Failed to establish connection. Error Code: " + asyncInfo.ErrorCode);
                // In the failure case we'll requeue the data and wait before trying again.
                networkConnection.Dispose();

            }    

    }


    public void ReadData()
    {
        if(connected)
        {  
            DataReader reader = new DataReader(networkConnection.InputStream);
            reader.InputStreamOptions = InputStreamOptions.Partial;
            reader.LoadAsync(512);
            data = reader.ReadString(512);

         }

    }


    private void Start()
    {
        mesh = gameObject.GetComponent<TextMesh>(); 
        Connect();
    }


    private void Update()
    {

        if (connected)
        {     
            mesh.text = data;


        } 
         else
            mesh.text = "Not Connected";
         ReadData();
    }

#endif

}

編輯:1.我懷疑ReadData()需要異步調用。因此,我更新了代碼,但即使現在也無法正常工作。 2.我正在使用Unity Editor,並且已啟用必需的設置,並且能夠連接到服務器。 只是我無法傳輸數據。 3.我正在使用netcat創建服務器。

我更新的代碼

 delegate void DelegateMethod();

    public async void ReadData()
    {
        if(connected)
        {  
            DataReader reader = new DataReader(networkConnection.InputStream);
            reader.InputStreamOptions = InputStreamOptions.Partial;
            await reader.LoadAsync(512);
            data = reader.ReadString(512);

         }

    }

    public void AsynCall()
    {
        DelegateMethod dlgt = new DelegateMethod(this.ReadData);
        IAsyncResult ar = dlgt.BeginInvoke(null, null); 
        dlgt.EndInvoke(ar);
    }

    private void Start()
    {
        mesh = gameObject.GetComponent<TextMesh>(); 
        Connect();
    }


    private void Update()
    {

        if (connected)
        { 

           if(String.IsNullOrEmpty(data))
                data = "Improper";    

             AsynCall();
             mesh.text = data;            
        } 
         else
            mesh.text = "Not Connected";

    }

我的懷疑是您尚未啟用UWP功能“ InternetClient”,這將阻止它實際連接到遠程服務器。 您沒有提及正在使用的工具鏈,但是如果您在Unity中,請在“構建設置”->“發布設置”->“ Windows應用商店”->“發布設置”->“功能”下進行檢查。 如果您在Visual Studio中工作,則可以在項目屬性中進行調整。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM