Ich habe ein Problem mit AsyncUdpSocket.
Ich habe mich mit einem Server verbunden, einige Daten gesendet und eine Antwort bekommen. Jetzt, da ich die tatsächliche Adresse des Servers nicht kenne, musste ich meinen Code ändern und die Daten an die Broadcast-Adresse 255.255.255.255 senden.
Hier ist mein Code:
%Vor%Das Problem ist also, dass es mit "host" arbeitet, aber nicht mit "bchost". In beiden Fällen sehe ich auf der Serverseite, dass die Daten empfangen werden und die Antwort an die Adresse des Absenders gesendet wird (was das iOS-Gerät sein sollte), aber auf dem Gerät erhalte ich die Daten nicht, wenn ich sie an bchost sende.
Irgendeine Idee, was ich vermisse?
Sie verbinden sich mit dem Host. Laut der Unix-Socket-FAQ erhalten Sie nur UDP-Pakete zurück, die eine Quell-IP-Adresse von 255.255 haben .255.255. Connecting stellt eine 1-zu-1-Beziehung für UDP her, so dass empfangene Pakete, deren Quelladressen sich von der verbundenen Adresse unterscheiden, gefiltert werden.
Wenn Sie keine Verbindung herstellen (Sie müssen Ihre Sendeleitung ändern, um die Broadcast-Adresse anzusprechen), sollte es funktionieren. Sie senden toHost:bcHost
- und dann sollte Ihr Empfang alle Pakete erhalten, die für seinen Port bestimmt sind.
Basierend auf Arthurs Antwort, hier ist der Arbeitscode. Ich frage mich, ob Empfang sollte vor dem Senden beginnen, nur um sicherzustellen, dass wir nicht eine sehr schnelle Antwort verfehlen, bevor Empfang bereit ist, aber bis jetzt scheint es nicht notwendig in meiner Situation. Siehe auch diesen Post zum Erstellen von Empfangsmethoden.
%Vor%Ich könnte komplett verrückt sein, aber es scheint, dass dies ein Problem mit AsyncUdpSocket auf iOS ist.
Auf ihrer Google-Codepage gibt es mehrere ähnliche und sogar identische Fehlerberichte. Leute haben sich beschwert, dass sie Udp-Pakete nach dem Senden nicht empfangen können, und in einigen Fällen sogar überhaupt.