Probleme beim asynchronen Empfang von UDP-Unicast-Paketen in Windows Phone 7

8

Ich versuche, meine Windows Phone 7 Mango-App auf eingehende UDP-Pakete aufmerksam zu machen, aber ich habe eine Menge Zeit. Ich habe die neue Beta 2 Aktualisierung des Windows Phone 7.1 SDK und dev tools installiert. Jede Abweichung, die ich von diesem MSDN-Beispiel versuche, führt zu einer SocketException 10022: "Ein ungültiges Argument wurde angegeben ".

Mein Code ist unten eingefügt. Ich habe versucht, den Code anzupassen, den ich gefunden habe diesen Stack-Overflow-Beitrag , aber ohne Erfolg. Diese Zeile generiert die Ausnahme, wenn sie erreicht ist:

%Vor%

Ich hoffe, dass hier jemand helfen kann, herauszufinden, was falsch läuft. Ich rufe "StartUnicastListen ()", wenn der Benutzer eine Taste drückt. m_udpSock ist zuvor als Klassenvariable definiert und auf null gesetzt. Im Abschnitt "Anmerkungen" der MSDN-Seite ReceiveFromAsync () habe ich alle erforderlichen Eigenschaften und Ereignisse festgelegt.

%Vor%

Es gibt so wenig Dokumentation die ordnungsgemäße Verwendung von ReceiveFromAsync () - das scheint die einzige Option für dies auf WP7 - und auf System.Net.Sockets in Windows Phone 7 im Allgemeinen jetzt.

Vielen Dank im Voraus für Ihre Hilfe.

    
greenlake 01.07.2011, 17:51
quelle

4 Antworten

3

Ich hatte das gleiche Problem, aber hier ist die Lösung, die ich mir ausgedacht habe. Wie wilbur4321 sagte, müssen Sie zuerst etwas an die Steckdose senden. Außerdem müssen Sie SendToAsync nicht nur aufrufen und vergessen, Sie müssen darauf warten (max. 1 Sekunde scheint für mich zu funktionieren).

Ich weiß nicht, warum Sie das tun müssen, aber etwas zu senden (ich sende nur 1 Byte: 0xFF) scheint den Trick zu machen.

    
Nick Banks 11.07.2011 04:26
quelle
1

Haben Sie das Beispiel unter Ссылка gesehen?

Angesichts der Tatsache, dass TCP-Sockets nur Client in Mango sind, frage ich mich, ob UDP-Sockets möglicherweise nur funktionieren, nachdem etwas gesendet wurde? Ich würde vorschlagen, das zu versuchen. Wenn das nicht funktioniert, könntest du dein gesamtes Projekt auf Dropbox oder ähnlichem posten, und ich werde es mir anschauen.

Danke, --randy

    
wilbur4321 02.07.2011 01:10
quelle
1

Ich fand das eine seltsame Sache in diesem "Win7 UDP Server" Beispiel Das ist der serverseitige UDP-Socket "bindet" nicht

In meinem Experiment rufen Sie "ReceiveFromAsync" auf einem Socket auf, das nicht bindet, die Ausnahme "ungültiges Argument" ist throw. Nach der Bindung vor "ReceiveFromAsync" wird mindestens "ReceiveFromAsync" die Ausnahme "ungültiges Argument" nicht auslösen.

Meine Codes sind Ihren ähnlich, aber es gibt immer noch einige Probleme. es scheint, dass ich "ReceiveFromAsync" einmal anrufe, aber das OS feuert die Event Callbacks zweimal ab, was einen sehr ernsten Race Condition verursacht.

Es gibt so wenige Beispiele, Dokumente über "UDP + SocketAsyncEventArgs". Vielleicht muss ich wieder auf "BeginReceiveFrom" zurückgreifen.

    
cheka 10.07.2011 00:37
quelle
0

Sie müssen ReceiveFormAsync () vom Completed-Ereignis von SendTAsync () aufrufen. Andernfalls erhalten Sie diese Ausnahme ..

    
Michael Sync 21.09.2011 13:09
quelle