не может принимать UDP-трансляцию в Windows 10 UWP из приложения для Android - PullRequest
0 голосов
/ 31 мая 2018
  • Я пишу приложения UWP и Android, используя Xamarin.forms & .net Standard 2 для общего кода.
  • Я пытаюсь отправлять и получать boradcast UPD из обоих приложений, но проблема в том, что я могу отправлять и получать, как и ожидалось, только из приложения Android, а приложение UWP не может принимать широковещательный пакет UDP.?
  • Я установил wireshark на Windows, и он может получать все пакеты из двух приложений.
  • Я добавил правило брандмауэра для своего app.uwp.exe (разрешить любую сеть, любой порт, любой протокол, любой IP-адрес). Я перезапустил компьютер, и мое приложение UWP все еще не может получить от приложения Android.

Код:

    using System.Threading.Tasks;
    using Xamarin.Forms;
    using Xamarin.Forms.Xaml;
    using System.Net.Sockets;
    using System.Net;    

    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class ItemsPage : ContentPage
    {
     public async static Task<String> UDP_receive()
     {
        var myUDP = new UdpClient(8888);
        myUDP.EnableBroadcast = true;            
        var myResult = await myUDP.ReceiveAsync();
        myUDP.Close();
        return Encoding.ASCII.GetString(myResult.Buffer) + " : " + myResult.RemoteEndPoint.Address.ToString();
     }

     public async static Task UDP_Send()
     {
        var myUDP = new UdpClient();
        var RequestData = Encoding.ASCII.GetBytes(DateTime.Now.ToLongTimeString());
        myUDP.EnableBroadcast = true;
        await myUDP.SendAsync(RequestData, RequestData.Length, new IPEndPoint(IPAddress.Broadcast, 8888));
        myUDP.Close();
     }
    void Button1_click(object sender, EventArgs e)
     {
        StartListen();
        StartSending();   
     }
     async Task StartListen()
     {
        Exception eXX = null;
        while (eXX == null)
        {
            try
            {
                myText.Text += Environment.NewLine + await UDP_receive();
            }
            catch (Exception ex2)
            {
                eXX = ex2;
                log(ex2);
            }
        }
     }

     async Task StartSending()
     {
        Exception eXX = null;
        while (eXX == null)
        {
            try
            {
                await MyData.UDP_Send();
                await Task.Delay(1000);
            }
            catch (Exception ex2)
            {
                eXX = ex2;
                log(ex2);
            }
        }
     } 
   }    

Выход Android:
11:57:11: 192.168.1.155
11:57:11: 192.168.1. 100
11:57:12: 192.168.1.155
11:57:12: 192.168.1. 100
11:57:13AM: 192.168.1.155
11:57:13 AM: 192.168.1. 100
....
Примечание: 192.168.1.100 - это IP-адрес компьютера Windows *

Выход UWP:
11:57:11: 192.168.1.100
11:57:12: 192.168.1.100
11:57:13: 192.168.1.100
11:57: 14:00: 192.168.1.100
11:57:15:00: 192.168.1.100
....

...