我尝试通过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”。
有人能弄清楚原因吗?
亲切问候
答案 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);
也许有人可以帮助我。
亲切的问候