Frage

Ich werde verrückt nach meinem aktuellen Projekt ...

Ich habe ein Gerät, das Daten über einen bestimmten Port sendet.Mein Ziel ist es, alle Geräte dieser Art an diesem Port zu erkennen.Beispiel :Ich habe 4 dieser Art von Geräten im selben Netzwerk und würde mit dem iPhone alle diese Geräte erkennen.

Es funktioniert mit einem JAVA-Erkennungstool und jetzt versuche ich es auf meinem iPhone.

Es gibt die Schritte, die im JAVA-Erkennungstool verwendet werden:

  • Erstellen Sie einen DatagramSocket (JAVA)
  • Holen Sie sich die Broadcast-Adresse (255.255.255.255)
  • DatagramPacket erstellen (JAVA)
  • Senden Sie das Paket an die Broadcast-Adresse mit dem Port 30303
  • Wechseln Sie in den Empfangsmodus
  • Aufgrund des Sockets erhält es die Antwortpakete
  • Extrahieren Sie die IP und den Hostnamen vom Gerät

Ich habe versucht, die gleichen Schritte mithilfe der AsyncUdpSocket-Klasse zu wiederholen: http://code.google.com/p/cocoaasyncsocket/

Und hier ist der Code, den ich bisher ausprobiert habe:

NSError *e;
NSString *d = @"abcd";
NSData *data = [d dataUsingEncoding:NSUTF8StringEncoding];


ssocket = [[AsyncUdpSocket alloc]initWithDelegate:self];
[ssocket setDelegate:self];



[ssocket enableBroadcast:YES error:&e];


[ssocket connectToHost:@"255.255.255.255" onPort:30303 error:&e];


[ssocket sendData:data withTimeout:-1 tag:0];

[ssocket receiveWithTimeout:-1 tag:0];

Der Delegierte - (BOOL)onUdpSocket:(AsyncUdpSocket *)sock didReceiveData:(NSData *)data withTag:(long)tag fromHost:(NSString *)host port:(UInt16)portwird nie genannt ...

Ich weiß nicht, was los ist..Können Sie mir bitte Ihre Meinung zu diesem Thema mitteilen?Wenn ich die richtige Methodik verwende und sehe, ob ich etwas falsch gemacht habe?

Vielen Dank im Voraus !!

MoKeS

BEARBEITEN :

Ich habe Wireshark verwendet, um den Netzwerkverkehr mit dem JavaDiscoverTool und meiner Anwendung auszuspionieren.Tatsächlich ist der Unterschied zwischen den beiden Paketen (iPhones und Javadiscovertools) der Quellport.Tatsächlich unterscheidet sich bei meiner Anwendung der Quellport vom Zielport, und ich denke, dass dies die Ursache des Problems ist.Ich muss einen Weg finden, den Quellport für das Paket, das ich sende, zu erzwingen ...

Irgendwelche Ideen ?Es befindet sich in der AsyncUdpSocket-Klasse.

War es hilfreich?

Lösung

Ich habe die Lösung gefunden.

verwenden :

NSError *e;
NSString *d = @"Discovery: Who is out there?\0\n";
NSData *data = [d dataUsingEncoding:NSUTF8StringEncoding];


ssocket = [[AsyncUdpSocket alloc]initWithDelegate:self];
[ssocket setDelegate:self];

[ssocket bindToPort:PORT error:&e];

[ssocket enableBroadcast:YES error:&e];


//[ssocket connectToHost:@"255.255.255.255" onPort:30303 error:&e];


//[ssocket sendData:data withTimeout:-1 tag:0];

[ssocket sendData:data toHost:@"255.255.255.255" port:30303 withTimeout:-1 tag:0];


[ssocket receiveWithTimeout:-1 tag:0];

Und der Delegierte:

- (BOOL)onUdpSocket:(AsyncUdpSocket *)sock didReceiveData:(NSData *)data withTag:(long)tag fromHost:(NSString *)host port:(UInt16)port
{
    NSString* aStr;

    aStr = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];


    NSLog(@"didreceivedata : %@", aStr);

    return NO;


}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top