Pregunta

Me estoy volviendo loco por mi proyecto real ...

Tengo un dispositivo que está enviando datos en un puerto específico. Mi objetivo es detectar todo este tipo de dispositivo en ese puerto. Ejemplo: Tengo 4 dispositivos en la misma red y lo haría con el iPhone Detectar todo este dispositivo.

Funciona con una herramienta de descubrimiento de Java y ahora estoy tratando de hacerlo en mi iPhone.

Hay los pasos utilizados en la herramienta de descubrimiento de Java:

  • Crear un Datagramsocket (Java)
  • Obtenga la dirección de transmisión (255.255.255.255)
  • Crear DataGrampCacket (Java)
  • Envíe el paquete en la dirección de transmisión con el puerto 30303
  • Ir en el modo de recepción
  • debido al zócalo, obtiene los paquetes de respuestas
  • Extrae la IP y el nombre de host del dispositivo

    Intenté repodificar los mismos pasos usando la clase AsyncudPSocket: http://code.google. com / p / cacaaasyncsocket /

    y aquí está el código que intenté hasta ahora:

    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];
    

    El delegado - (BOOL)onUdpSocket:(AsyncUdpSocket *)sock didReceiveData:(NSData *)data withTag:(long)tag fromHost:(NSString *)host port:(UInt16)portis nunca llamó ...

    No sé qué está mal .. ¿Puedes por favor darme sus opiniones sobre este tema? Si estoy usando la metodología correcta y veo si hice algo malo.

    ¡Gracias de antemano!

    MOKES

    Editar:

    Utilicé Wireshark para oler el tráfico de la red con el javadiscovertool y mi aplicación. De hecho, la diferencia entre los 2 paquetes (iPhone y JavadiscoverOverTool's) es el puerto de origen. De hecho, en mi solicitud, el puerto de origen es diferente al puerto de destino y creo que está causando el problema. Necesito encontrar una manera de forzar el puerto de origen en el paquete que estoy enviando ...

    ¿Alguna idea? Está en la clase Asyncudsocket.

¿Fue útil?

Solución

Encontré la solución.

Uso:

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];

y el delegado:

- (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;


}

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top