Передача строки через UDP с использованием cocoaasyncsocket - PullRequest
0 голосов
/ 08 октября 2010

Я учил себя Objective-C в течение последних нескольких месяцев; Я создаю приложение для iPhone для своей компании. Я начинал как (и все еще являюсь) полным новичком, но до сих пор у меня не было проблем с простым поиском ответов на все мои вопросы в различных местах в Интернете.

Для последней и наиболее важной части моего приложения мне нужно отправить простую строку на адрес / порт через UDP при нажатии кнопки. Строка, адрес и порт - все переменные, извлеченные из объекта, переданного моему контроллеру представления.

Я два дня копался в поисках решений и читал примеры, но все серьезно для меня читается как греческий. Я не уверен, о каком главном куске знаний я, похоже, упустил, но я в полной растерянности. Я узнал о cocoaasyncsocket и о том, как это «просто», и это звучит идеально для того, что мне нужно, но я просто не могу сосредоточиться на этом. Я действительно надеюсь, что кто-то здесь может помочь мне разобрать это на простые термины.

Вот фрагмент кода, который я пробовал, но безуспешно. Этот код из моего viewController, с AsyncUdpSocket.h импортированным:

-(IBAction)udpButtonTwoPressed:(id)sender {
    NSData *myData;
    myData = [[NSData alloc] initWithData:([selectedObject
      valueForKey:@"udpCommandTwo"])];

    AsyncUdpSocket *mySocket;
    mySocket = [[AsyncUdpSocket alloc] initWithDelegate:self ];

    NSError *error = nil;
    if (!([mySocket connectToHost:([selectedObject
      valueForKey:@"serverIPAddress"]) onPort:([[selectedObject
      valueForKey:@"serverPort"] intValue]) error:&error])) {
        NSLog(@"Can't Connect Cause: %@", error);
        abort();
    }

    [mySocket close];

    [mySocket release];
    [myData release];
}

Что я здесь не так делаю?

1 Ответ

0 голосов
/ 20 января 2011

Есть две вещи, которые выделяются из вашего примера.

  1. Я не вижу, что ты что-то пишешь в сокет. Посмотрите на writeData: withTimeout: tag.

  2. CocoaAsyncSocket является асинхронным, поэтому в вашем примере все выходит из области видимости. Если вы действительно хотите писать синхронно, в примере есть пример.

    NSString * customRunLoopMode = @ "MySyncWrite";

    [asyncSocket addRunLoopMode: customRunLoopMode]; [asyncSocket writeData: didBackgroundData withTimeout: тег TIMEOUT_NONE: TAG_BG];

    syncWriteComplete = NO; BOOL runLoopReady = YES;

    while (runLoopReady &&! SyncWriteComplete) { runLoopReady = [[NSRunLoop currentRunLoop] runMode: customRunLoopMode beforeDate: [NSDate dateWithTimeIntervalSinceNow: 1.0]]; }

    [asyncSocket removeRunLoopMode: customRunLoopMode];

НТН

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...