O aplicativo UWP não recebe o datagrama UDP de um aplicativo de desktop .NET no localhost
Eu tenho tentado configurar um servidor cliente entre um aplicativo UWP como cliente e um aplicativo de desktop .NET como servidor. Estou usando datagramas UDP como o sistema de mensagens entre os dois.
Aqui meu código UWP para escutar datagramas no IP do host local na porta 22222:
private async void listenToServer()
{
// Setup UDP Listener
socketListener = new DatagramSocket();
socketListener.MessageReceived += MessageReceived;
await socketListener.BindEndpointAsync(new HostName("127.0.0.1"),"22222");
Debug.WriteLine("Listening: " + socketListener.Information.LocalAddress + " " + socketListener.Information.LocalPort);
}
private async void MessageReceived(DatagramSocket sender, DatagramSocketMessageReceivedEventArgs args)
{
// Interpret the incoming datagram's entire contents as a string.
uint stringLength = args.GetDataReader().UnconsumedBufferLength;
string receivedMessage = args.GetDataReader().ReadString(stringLength);
Debug.WriteLine("Received " + receivedMessage);
}
Aqui está meu aplicativo de desktop WinForm .NET para enviar datagramas no host local na porta 2222:
public async void sendToClient()
{
// Setup UDP Talker
talker = new UdpClient();
sending_end_point = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 22222);
talker.Connect(sending_end_point);
byte[] send_buffer = Encoding.ASCII.GetBytes("Hello!");
await talker.SendAsync(send_buffer, send_buffer.Length);
}
Aqui está o que eu tentei e o que sei da minha solução de problemas:Enviando um datagrama UDPde Área de trabalho UWP para .NETtrabalho.
Código UWP para enviar mensagem para a área de trabalho .NET pela porta 11111 do host local:
public async void sendToServer()
{
// Connect to the server
socketTalker = new DatagramSocket();
await socketTalker.ConnectAsync(new HostName("127.0.0.1"), "11111");
Debug.WriteLine("Connected: " + socketTalker.Information.RemoteAddress + " " + socketTalker.Information.RemotePort);
// Setup Writer
writer = new DataWriter(socketTalker.OutputStream);
writer.WriteString("Ping!");
await writer.StoreAsync();
writer.DetachStream();
writer.Dispose();
}
Código de área de trabalho .NET para escutar mensagem da UWP pelo mesmo IP e porta:
private async Task listenToClient()
{
// Setup listener
listener = new UdpClient(11111);
UdpReceiveResult receiveResult = await listener.ReceiveAsync();
Debug.WriteLine(" Received: " + Encoding.ASCII.GetString(receiveResult.Buffer));
}
Enviando datagrama UDP da área de trabalho .NET para UWPtrabalho através de IPs diferentes (2 computadores diferentes)
Eu testei isso definindo os endereços IP do ouvinte e do locutor para o mesmo endereço IP em que o servidor estava sendo executado e funciona perfeitamente. Isso levou a pesquisas que me levaram a # 3 ...
Isenção de loopback não fez diferença
A execução do CheckNetIsolation.exe e da ferramenta de isenção de loopback para isentar o aplicativo UWP da restrição de IP de loopback não corrigiu esse problema. Parece que não deveria importar, pelo que li (Problemas com o UDP no Windows 10. UWP), a execução no ambiente do Visual Studio já deve estar isenta de loopback, mas tentei assim mesmo, e não de sorte.