2015-08-25 3 views
0

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

UPDATE:

Я попытался запустить предоставленные примеры, но они не похоже на работу с адресом хоста + порт, который я предоставил , Что бы я заполнил для них (на стороне клиента), если мой клиент + сервер находится на одном и том же 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». Я также попытался изменить роли, но до сих пор не добился успеха.

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

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

ответ

0

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

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

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

Смежные вопросы