我正在开发一个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有效地进行了连接,但此后发生了某些事情。
有什么问题的想法吗?
答案 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;
}