Не може да получи UDP Windows RT

Пиша приложение за Windows Store/Metro/Modern/RT за Windows 8/RT, което трябва да получава UDP пакети на порт 49030, но изглежда не мога да получа никакви пакети. Следвах урока за използване на DatagramSocket до буквата и не получавам нищо. Знам, че моята изпращаща програма изпраща данни, както мога да го видя в wireshark. Написах и тестово C# конзолно приложение, което използва обикновения API за BSD сокет (System.Net.Sockets.Socket), който правилно получава данните през UDP.

Това е кодът, който работи:

Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
s.Bind(new IPEndPoint(IPAddress.Any, 49030));
byte[] buf = new byte[5000];
while (true)
{
    Console.WriteLine("Received " + s.Receive(buf) + " bytes.");
}

Това извежда редове, които отчитат броя байтове, които се изпращат, както се очаква.

Моят код за приложението RT:

public async void StartListening()
{
    DatagramSocket s = new DatagramSocket();
    s.MessageReceived += s_MessageReceived;
    await s.BindServiceNameAsync(this._port.ToString());   
}

void s_MessageReceived(DatagramSocket sender, DatagramSocketMessageReceivedEventArgs e)
{
    System.Diagnostics.Debug.WriteLine("Hark! A packet!");  // Breakpoint here
}

След извикване на StartListening(), точката на прекъсване никога не се достига и нищо не се отпечатва в изходния журнал.

Опитах се да стартирам пробата DatagramSocket, предлагана от MSFT, и тя не работи без проблем (разбира се). Виждам, че сокетът е се отваря/прослушва, защото се показва в resmon.exe. Освен това имам активирани всички подходящи възможности в манифеста за приложението. Тествах го на моя лаптоп x86 и на моя Surface RT (дистанционно отстраняване на грешки) и и двата показват същото поведение.

Някакви идеи защо не работи?


person Matthew Kennedy    schedule 07.03.2013    source източник
comment
Този въпрос показва, че socket.Bind изглежда не работи и трябва да използвате различен метод: stackoverflow.com/questions/10290945/   -  person Sam Axe    schedule 07.03.2013
comment
интересно Изглежда, че това може да работи, но трябва да мога да слушам на всички/неназначени (s.Bind(new IPEndpoint(IPAddress.Any, port))). Има ли начин да направите това с ConnectAsync()?   -  person Matthew Kennedy    schedule 07.03.2013
comment
Променили ли сте вашия appxmanifest, за да разрешите работа в мрежа?   -  person Nicolas Voron    schedule 13.08.2015