Проблемы с асинхронным получением UDP-пакетов Unicast в Windows Phone 7

Я пытаюсь заставить свое приложение Windows Phone 7 Mango прослушивать входящие UDP-пакеты, но у меня очень много времени. У меня установлено новое обновление Beta 2 Windows Phone 7.1 SDK и инструменты разработчика. Любое отклонение от этого образца MSDN приводит к SocketException 10022, «Предоставлен недопустимый аргумент».

Мой код вставлен ниже. Я пытался адаптировать код, который нашел в этом сообщении stackoverflow , но безрезультатно. Эта строка генерирует исключение при достижении:

synchronous = m_udpSock.ReceiveFromAsync(udpRecvArg);

Я надеюсь, что кто-то здесь может помочь определить, что идет не так. Я вызываю StartUnicastListen (), когда пользователь нажимает кнопку. m_udpSock ранее определен как переменная класса и имеет значение null. В разделе «Примечания» на странице ReceiveFromAsync () MSDN я установил все необходимые свойства и события.

private void StartUnicastListen()
{
    m_udpSock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
    SocketAsyncEventArgs udpRecvArg = new SocketAsyncEventArgs(); 
    udpRecvLoopStart(udpRecvArg);
}

private void udpRecvLoopStart(SocketAsyncEventArgs udpRecvArg) 
{ 
    byte[] udpRecvBuffer = new byte[2048];
    udpRecvArg.SetBuffer(udpRecvBuffer, 0, udpRecvBuffer.Length); 
    udpRecvArg.RemoteEndPoint = new IPEndPoint(IPAddress.Any, 11100); 
    udpRecvArg.Completed += new EventHandler(udpRecvArg_Completed); 
    udpRecv(udpRecvArg); 
}    

private void udpRecv(SocketAsyncEventArgs udpRecvArg) 
{ 
     bool synchronous = false; 
     try {
         synchronous = m_udpSock.ReceiveFromAsync(udpRecvArg);
     } catch (SocketException e) {
         Log("recvUdp()\n" + e.SocketErrorCode + "\n" + e.ToString(), false); 
         return; 
     } if (synchronous)
         udpRecvArg_Completed(this, udpRecvArg); 
}

void udpRecvArg_Completed(object sender, SocketAsyncEventArgs udpRecvArg) { 

     EndPoint udpEp = udpRecvArg.RemoteEndPoint; 
     string msg = Encoding.UTF8.GetString(udpRecvArg.Buffer, udpRecvArg.Offset, udpRecvArg.BytesTransferred); 
     Log(udpEp + " " + msg,false); 
     udpRecv(udpRecvArg); 
}

Существует такая ограниченная документация о правильном использовании ReceiveFromAsync () - который, кажется, является единственным вариантом для это в WP7 - и в целом прямо сейчас в System.Net.Sockets в Windows Phone 7.

Заранее благодарим за любую помощь, которую вы можете предоставить.

8
задан Community 23 May 2017 в 10:29
поделиться