HoloLens用作udp服务器,但不作为客户端

时间:2018-06-19 14:03:42

标签: c# sockets udp hololens

我尝试通过UWP应用将数据从PC(服务器)发送到HoloLens(客户端)。 我的主要目标是为HoloLens接收器使用“ Windows.Networking.Sockets.DatagramSocket”,因为否则代码无法统一工作。 我已经用错误的角色完成了系统。 HoloLens将数据发送到PC,但使用“ System.Net.Sockets.UdpClient”而不是DatagramSocket ... 在这里,您可以看到重要的代码部分:

// Current client application on PC (using System.Net.Sockets...)
HostName serverIp = new HostName("192.168.0.109");
string port = "1337";

async void Client()
{
    DatagramSocket socket = new DatagramSocket(); //creating socket
    socket.MessageReceived += Socket_MessageReceived; //attach receive event
    await socket.BindEndpointAsync(serverIp, port); //bind socket
}

async void Socket_MessageReceived(DatagramSocket sender,
DatagramSocketMessageReceivedEventArgs args) //receive event
{
    Stream streamIn = args.GetDataStream().AsStreamForRead();
    StreamReader reader = new StreamReader(streamIn);
    string msg = await reader.ReadLineAsync();
    Print("Message received: " + msg); 
}


// Current Server application on HoloLens (using Windows.Networking.Sockets...)
IPAddress serverIp = IPAddress.Parse("192.168.0.109"); 
const int port = 1337;

async void Server()
{
    var udpClient = new UdpClient();
    var serverEP = new IPEndPoint(serverIp, port);
    byte[] bytes = Encoding.ASCII.GetBytes("Hello from Client!"); //parse
    await udpClient.SendAsync(bytes, bytes.Length, serverEP); //send
}

PC成功从HoloLens接收到消息。 我的问题:当我在PC发送的设备(通过UdpClient)和HoloLens接收的(通过DatagramSocket)上交换服务器和客户端应用程序时,不再收到该消息。 两台设备都已连接到网络,我在PC上禁用了防火墙,并且在两个appxmanifests中都启用了“ PrivateNetworks”。

有人能弄清楚原因吗?

亲切问候

1 个答案:

答案 0 :(得分:0)

我以某种方式使它起作用,但不幸的是我无法分辨出区别。 我现在的问题是,通信只能在一个方向上进行。我可以写套接字,消息到达,但不能从套接字发回消息。

当我想从套接字写入时,一定不要使用“ socket.BindEndpointAsync()”,而应该使用“ socket.ConnectAsync()”对吗?但是无论我使用DataWriter还是OutputStream属性,实际工作的接收者都无法接收到消息。

        writer = new DataWriter(socket.OutputStream);
        writer.WriteString("test");

        IBuffer buffer = Encoding.ASCII.GetBytes("test").AsBuffer();
        await socket.OutputStream.WriteAsync(buffer);

也许有人可以帮助我。

亲切的问候