来自HoloLens的StreamSocket连接无法正常工作

时间:2019-02-01 10:37:10

标签: unity3d networking async-await hololens

我正在开发一个HoloLens应用程序,该应用程序在与以Java编写的本地服务器的客户端-服务器连接中充当客户端(您可以假定服务器正常运行)。

HoloLens应该打开StreamSocket并连接到服务器,但是由于某些原因,代码仍停留在连接过程中。

代码如下:

void Start ()
    {
        text = GameObject.Find("DEBUG_TEXT").GetComponent<Text>();
        Invoke("Connect", 7f);      
    }



 public void Connect()
    {

#if !UNITY_EDITOR
        Task.Run(async () => {
            try
            {
                socket = new StreamSocket();
                await socket.ConnectAsync(new HostName(ip), port); //STOP HERE
                writer = new StreamWriter(socket.OutputStream.AsStreamForWrite());
                reader = new StreamReader(socket.InputStream.AsStreamForRead());

                await Send("Hi");
                await Receive();

            }
            catch(Exception e)
            {
                text.text = e.Message;
            }
        });
#endif
    }

基本上,代码在ConnectionAsync处停止,并且永远不会继续。在服务器端,服务器会通过“新客户端已连接!” 通知我,因此我认为HoloLens有效地进行了连接,但此后发生了某些事情。

有什么问题的想法吗?

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,并用here中提到的方法解决了。

简而言之,永远不要在主线程上执行Task.Wait()或Task.Result之类的事情。

在我的情况下,我使用Task.Result并卡在连接操作上。 删除后,该程序可以正常运行。

这是错误的代码:

private async Task<string> _SocketSend(string request)
{
    using(StreamSocket streamSocket = new StreamSocket())
    {
        await streamSocket.ConnectAsync(new HostName(this.socketHost), this.port);
        
        // other code
        ...
    }
    
}

public string SocketSend(string request)
{
    return _SocketSend(request).Result;
}