【问题标题】:HoloLens works as UDP server but not as clientHoloLens 用作 UDP 服务器,但不能用作客户端
【发布时间】:2018-11-28 12:50:58
【问题描述】:

我尝试在 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 上禁用了防火墙,并且在两个 appxmanifest 中都启用了“PrivateNetworks”。

有谁知道原因吗?

亲切的问候

【问题讨论】:

  • 服务器不应使用 IP 地址来监听。您应该使用 IPAny,以便将代码移植到任何 PC。

标签: c# sockets udp hololens


【解决方案1】:

我以某种方式使它起作用,但不幸的是我无法区分。 我现在的问题是沟通只在一个方向上起作用。我可以写入套接字并且消息到达,但我无法从套接字发送回消息。

当我想从套接字写入时,我不能使用“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);

也许有人可以帮助我。

亲切的问候

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-22
    • 2012-01-04
    相关资源
    最近更新 更多