Próbuję pobrać aplikację Windows Phone 7 Mango do odsłuchiwania przychodzących pakietów UDP, ale z dużą szybkością. Mam nowe odświeżenie Beta 2 zestawu Windows Phone 7.1 SDK i narzędzi programistycznych. Wszelkie odchylenia, które wypróbowuję od tego MSDN sample, powodują SocketException 10022, "Podano niepoprawny argument".Problemy z asynchronicznym odbiorem pakietów UDP Unicast w systemie Windows Phone 7
Mój kod został wklejony poniżej. Próbowałem dostosować kod, który znalazłem na this stackoverflow post, ale bezskutecznie. Linia ta generuje wyjątek po jej osiągnięciu:
synchronous = m_udpSock.ReceiveFromAsync(udpRecvArg);
Mam nadzieję, że ktoś tutaj pomoże ustalić, co się dzieje. Nazywam "StartUnicastListen()", gdy użytkownik naciśnie przycisk. m_udpSock jest wcześniej zdefiniowany jako zmienna klasy i ustawiony na null. W sekcji "Uwagi" strony MSN ReceiveFromAsync() ustawiłem wszystkie wymagane właściwości i zdarzenia.
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<SocketAsyncEventArgs>(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);
}
Jest taka ograniczona dokumentacja właściwe wykorzystanie ReceiveFromAsync() - co wydaje się być jedyną opcją dla tego na WP7 - i na System.Net.Sockets w Windows Phone 7 w ogóle teraz.
Z góry dziękujemy za wszelką pomoc, jaką możesz zapewnić.
Mam podobny problem. Z jakiegoś powodu otrzymuję wyjątek również w ReceiveFromAsync. –
Ten sam problem również tutaj. – IDWMaster
Ten sam problem tutaj: | – Antimony