API-интерфейс Boxee UDP Broadcast Discover с использованием XML (удаленный)

Я пытаюсь использовать интерфейс удаленного управления Boxee для отправки UDP-трансляции для обнаружения устройств.

В настоящее время использую AsyncUdpSocket но при отправке запроса я просто получаю запрос обратно как ответ, а не ожидаемый ответ.

Вот мой код, я что-то упустил?:

- (void)viewDidLoad
{
    [super viewDidLoad];

    AsyncUdpSocket *socket  = [[AsyncUdpSocket alloc] initWithDelegate:self];
    [socket enableBroadcast:YES error:nil];
    [socket bindToPort:2562 error:nil];

    NSString *xml           = @"<?xml version=\"1.0\"?><BDP1 cmd=\"discover\" application=\"iphone_remote\" challenge=\"shittycitttyy123\" signature=\"cdddac43fdbce83d24b7c1ca5149c697\"/>";


    NSData *data            = [xml dataUsingEncoding:NSUTF8StringEncoding];

    if([socket sendData:data toHost:@"10.0.0.255" port:2562 withTimeout:3 tag:0]){
        [socket receiveWithTimeout:2 tag:0];
    }
}

-(BOOL)onUdpSocket:(AsyncUdpSocket *)sock didReceiveData:(NSData *)data withTag:(long)tag fromHost:(NSString *)host port:(UInt16)port{
    NSLog(@"Got data %@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);

    return YES;
}

1 ответ

Я думаю, что ваша проблема в том, что ваш код подготовлен только для получения одного пакета. Вы отправляете широковещательный пакет, так что он будет принят всеми устройствами в локальной сети, включая ваше собственное, что вы и видите. Кроме того, хотя я понимаю, что это всего лишь тестовый код, в сети может быть несколько ящиков Boxee, поэтому вы можете ожидать возможность множественных ответов.

попробуйте что-то вроде этого -

 (void)viewDidLoad
{
    [super viewDidLoad];

    AsyncUdpSocket *socket  = [[AsyncUdpSocket alloc] initWithDelegate:self];
    [socket enableBroadcast:YES error:nil];
    [socket bindToPort:2562 error:nil];

    NSString *xml           = @"<?xml version=\"1.0\"?><BDP1 cmd=\"discover\" application=\"iphone_remote\" challenge=\"shittycitttyy123\" signature=\"cdddac43fdbce83d24b7c1ca5149c697\"/>";


    NSData *data            = [xml dataUsingEncoding:NSUTF8StringEncoding];

    if([socket sendData:data toHost:@"10.0.0.255" port:2562 withTimeout:3 tag:0]){
        [socket receiveWithTimeout:2 tag:0];
    }
}

-(BOOL)onUdpSocket:(AsyncUdpSocket *)sock didReceiveData:(NSData *)data withTag:(long)tag fromHost:(NSString *)host port:(UInt16)port{
    NSLog(@"Got data %@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);

    //TODO - process incoming packet and determine if it is a Boxee response

    [socket receiveWithTimeout:2 tag:tag+1];  //Look for more data
    return YES;
}

- (void)onUdpSocket:(AsyncUdpSocket *)sock didNotReceiveDataWithTag:(long)tag dueToError:(NSError *)error
{
   NSLog(@"Did not receive data");  
   //TODO check error and take appropriate action
}
Другие вопросы по тегам