Sockets Hololens UDP服务器从不接收消息

Sockets Hololens UDP服务器从不接收消息,sockets,unity3d,server,udpclient,hololens,Sockets,Unity3d,Server,Udpclient,Hololens,我正在用unity制作一个Hololens应用程序,它启动一个udp服务器。这一个等待来自外部udp客户端的消息。以下是服务器端: using UnityEngine; using System; using System.IO; #if !UNITY_EDITOR using Windows.Networking.Sockets; #endif public class server : MonoBehaviour { #if !UNITY_EDITOR DatagramSock

我正在用unity制作一个Hololens应用程序,它启动一个udp服务器。这一个等待来自外部udp客户端的消息。以下是服务器端:

using UnityEngine;
using System;
using System.IO;


#if !UNITY_EDITOR
using Windows.Networking.Sockets;
#endif

public class server : MonoBehaviour
{
#if !UNITY_EDITOR
    DatagramSocket socket;
#endif
#if UNITY_EDITOR
    void Start()
    {
    }
#endif
#if !UNITY_EDITOR
    // use this for initialization
    async void Start()
    {
      socket = new DatagramSocket();
      socket.MessageReceived += Socket_MessageReceived;

      try
      {
      await socket.BindEndpointAsync(null, "24017");
      }
      catch (Exception e)
      {
      Debug.Log(e.ToString());
      Debug.Log(SocketError.GetStatus(e.HResult).ToString());
      return;
      }

    }
#endif

    // Update is called once per frame
    void Update()
    {

    }

#if !UNITY_EDITOR
    private async void Socket_MessageReceived(Windows.Networking.Sockets.DatagramSocket sender,
    Windows.Networking.Sockets.DatagramSocketMessageReceivedEventArgs args)
    {
    //Read the message that was received from the UDP echo client.
    Stream streamIn = args.GetDataStream().AsStreamForRead();
    StreamReader reader = new StreamReader(streamIn);
    string message = await reader.ReadLineAsync();

    Debug.Log("MESSAGE: " + message);
    }
#endif
}
以及nodejs客户端:

var PORT = 24017;
var HOST = '192.168.1.111';

var dgram = require('dgram');
var message = new Buffer('My KungFu is Good!\r\n');

var client = dgram.createSocket('udp4');
client.send(message, 0, message.length, PORT, HOST, function(err, bytes) {
    if (err) throw err;
    console.log('UDP message sent to ' + HOST +':'+ PORT);
    client.close();
});
服务器运行时没有问题,它等待来自服务器的消息。当我启动客户端时,我收到消息,确认消息已成功发送。然而,服务器端从未接收到客户端的消息,控制台中没有错误,比如if没有被发送。我真的不知道在哪里可以找到解决办法。。。 非常感谢您的帮助。

  • Internet客户端/服务器功能适用于Internet,但不适用于本地网络
  • 专用客户端/服务器功能适用于本地网络,但不适用于Internet
你至少需要第二个。
在WSA平台的播放器设置中,向下滚动到“功能”面板,选中所需的功能,Unity将相应地自动生成清单文件。在“功能”面板中向下滚动查看更多信息。

在Hololens上运行时,UDP堆栈中的某个地方存在一个错误,要求您在能够接收消息之前发送任何数据。我原以为我可以通过
UdpClient
获得这一发现,但只读取了几次,结果它停止了,没有进一步探索

正如发现的那样&

根据上述要点逐字编写代码:

var portStr=“3109”;
套接字=新的DatagramSocket();
socket.MessageReceived+=\u socket\u MessageReceived;
wait_Socket.BindServiceNameAsync(portStr);
//不清楚是否需要这样做
等待任务。延迟(3000);
//发送消息,否则接收不起作用?!
var outputStream=await _Socket.getoutputstreasync(新主机名(“255.255.255.255”),portStr);
DataWriter writer=新的DataWriter(outputStream);
writer.WriteString(“你好,世界!”);
等待writer.StoreAsync();

Hololens UWP应用程序的功能配置是什么?我们应该启用Internet(客户端)功能。查看Package.appxmanifest文件在unity中我查看了“专用网络(客户端和服务器)”,但可能需要手动编辑清单文件?谢谢你解决了这个问题吗?我有一个UDP服务器(UWP),它工作得很好,确实可以在网络上发送消息。然而全息透镜并没有捕捉到任何东西。这就好像它被防火墙阻止了一样。我甚至向Wireshark确认,一切正常。除了愚蠢的全息镜头。嗨,RCYR。谢谢你的回复。我完全是这样设置清单文件的。但是,没有收到任何消息。。。。我尝试了不同的端口,但没有成功。。。