Простой сервер и клиент CocoaAsyncSocket UDP

Я пытаюсь начать и создать простой UDP-сервер и клиент, используя CocoaASyncSocket. Я почти воспроизвел код в примерах из здесь

ОБНОВЛЕНИЕ:

Я пытался запустить предоставленные примеры, но они, похоже, не работают с указанным адресом хоста + портом. Что бы я заполнил для них (на стороне клиента), если мой клиент + сервер находятся на одном и том же Wi-Fi?

Мой сервер:

-(void)startServer{
    udpSocket = [[GCDAsyncUdpSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];

    NSError *error = nil;

    if (![udpSocket bindToPort:PORT error:&error])
    {
        NSLog(@"Error starting server (bind): %@", error);
        return;
    }
    if (![udpSocket beginReceiving:&error])
    {
        [udpSocket close];
        NSLog(@"Error starting server (recv): %@", error);
        return;
    }

    NSLog(@"Udp Echo server started on %@:%i",[udpSocket localHost_IPv4],[udpSocket localPort]);

    isRunning = YES;

}

Мой клиент:

-(void)setupSocket{
    udpSocket = [[GCDAsyncUdpSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];

    NSError *error = nil;


    if (![udpSocket bindToPort:HOST_PORT error:&error])
    {
        NSLog(@"Error binding: %@", error);
        return;
    }
    if (![udpSocket beginReceiving:&error])
    {
        [udpSocket close];
        NSLog(@"Error receiving: %@", error);
        return;
    }

    NSLog(@"ready");
}

- (IBAction)send:(id)sender
{

    NSString *msg = @"testerrrr";

    NSData *data = [msg dataUsingEncoding:NSUTF8StringEncoding];
    [udpSocket sendData:data toHost:HOST_IP port:HOST_PORT withTimeout:-1 tag:0];
    NSLog(@"sent message to server");
}

Я не верю, что моя проблема заключается в инициализации сервера или сокета, но, возможно, в том, какие у меня выбраны IP + PORT. Прямо сейчас я запускаю сервер на симуляторе iOS и клиент на реальном устройстве. При отправке данных с устройства я вижу, что пакеты уходят, но сервер их не получает.

Я настроил его для привязки порта 1234, и что клиент отправляет его на адрес сервера, который я получил от «whatismyip.com». Я также пытался поменять местами роли, но все равно безуспешно.

Кроме того, когда я попытался отправить данные самому себе (например, сервер -> сервер), это сработало, но между двумя не повезло!

Это кажется довольно простой задачей, но не удалось заставить ее работать. Цените помощь!


person royherma    schedule 25.08.2015    source источник


Ответы (1)


Как я изначально и подозревал, проблема была с адресом, который я вводил от имени клиента. Правило для большого пальца:

  1. Если S + C работают на одном устройстве. Используйте «localhost» в качестве адреса хоста
  2. Если S + C работают на разных устройствах, но на одном и том же Wi-Fi-соединении. Сделайте IFConfig на сервере и используйте найденный там IP.
  3. Если S + C работают на разных устройствах и не используют одно и то же соединение, вам необходимо перенаправить порт с вашего маршрутизатора на ваш компьютер.

Надеюсь, это поможет!

person royherma    schedule 25.08.2015