我正在统一制作一个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();
});
服务器运行无问题,它等待来自服务器的消息。当启动客户端时,我收到确认消息已成功发送的消息。但是,服务器端永远不会收到客户端的消息,控制台中不会出现错误,就像未发送一样。我真的不知道在哪里找到解决方案...
非常感谢你的帮助。
最佳答案
您可能至少需要第二个。
在“WSA平台的播放器设置”中,向下滚动到“功能”面板,选中所需的功能,然后Unity将自动生成 list 文件。在“功能”面板本身中也向下滚动以获取更多信息。
关于sockets - Hololens UDP服务器从不接收消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44034118/