【问题标题】:Why is no message received in WS communication on a UWP device?为什么在 UWP 设备上的 WS 通信中没有收到消息?
【发布时间】:2019-08-21 13:15:00
【问题描述】:

我有一个 WS 服务器,我想从该服务器(使用另一个 Web 应用程序)向连接到会话的所有 HoloLens 设备广播消息。

首先,我在 Hololens 应用程序中实现了一个 MessageWebSocket 客户端,它启动了与示例公共 WS 服务器 echo.websocket.org 的连接,只是为了检查客户端的设置是否正确。代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

#if WINDOWS_UWP
using System.Threading.Tasks;
using Windows.Networking.Sockets;
using Windows.Storage.Streams;
using Windows.Web;
using System;

#endif

public class WebSocketClient : MonoBehaviour
{
    void Start()
    {

#if WINDOWS_UWP
            int msgTime = 5;
            int fadeTime = 1;
            guiPhraseReporter.QueueRaport("START", msgTime, fadeTime);
            MessageWebSocket ws = new MessageWebSocket();
            ws.Control.MessageType = SocketMessageType.Utf8;
            ws.MessageReceived += (MessageWebSocket sender, MessageWebSocketMessageReceivedEventArgs args) =>
            {
                guiPhraseReporter.QueueRaport("Trying to receive message...", msgTime, fadeTime);
                try
                {
                    using (DataReader dataReader = args.GetDataReader())
                    {
                        dataReader.UnicodeEncoding = UnicodeEncoding.Utf8;
                        string message = dataReader.ReadString(dataReader.UnconsumedBufferLength);
                        Debug.Log(message);
                    }
                }
                catch (Exception ex)
                {
                    Debug.Log("Error occurred");
                }
            };

            ws.Closed += (IWebSocket sender, WebSocketClosedEventArgs  args) => {
                Debug.Log("WS closed");
            };

            try
            {
                Task connectTask = ws.ConnectAsync(new Uri("ws://echo.websocket.org")).AsTask();
                connectTask.ContinueWith(async _ =>
                {
                    string message = "Hello, World!";
                    using (DataWriter dataWriter = new DataWriter(ws.OutputStream))
                    {
                        dataWriter.WriteString(message);
                        await dataWriter.StoreAsync();
                        dataWriter.DetachStream();
                    }
                    Debug.Log("Sending Hello World");
                });
            }
            catch (Exception ex)
            {
                WebErrorStatus webErrorStatus = WebSocketError.GetStatus(ex.GetBaseException().HResult);
                // Add additional code here to handle exceptions.
                Debug.Log(ex);
            }

#endif

    }
}

它工作正常,我能够向服务器发送一条消息,它被回显并被客户端正确接收。

但是,当我使用将要测试的实际服务器时,事情就会变得一团糟。在我的服务器上,我复制了 echo.websocket.org 的行为,并回显了发送的任何消息。我可以连接,连接没有关闭(从未调用关闭),但我没有收到任何消息。

如果我使用网络浏览器(使用 chrome 的智能 Websocket 扩展)测试两个服务器,它们都可以工作。唯一的区别(也是我得到的唯一可能的线索)是示例服务器(在 Hololens 上工作的服务器)在连接时发送更多标头:

vs 我的服务器:

也许有一些更简单的方法可以做到这一点,但到目前为止,我还没有找到任何可以在 UWP 上工作的好的 WS 包装器。任何帮助表示赞赏。

【问题讨论】:

  • 这可能与线程有关吗?您是否尝试设置 Brakepoints 并调试代码?

标签: c# unity3d websocket uwp hololens


【解决方案1】:

毕竟这是我的服务器应用程序上的错误逻辑。所以一开始WS通信没有问题,谢谢你的时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-16
    • 2014-11-12
    • 1970-01-01
    • 2012-06-09
    • 2017-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多