2013-12-15 4 views
1

Я пытаюсь внедрить приложение-первооткрыватель IP для платформы микрочипов. Я использую GCDAsyncSocket для этого. ЕСЛИ я отправляю конкретное сообщение, все интересующие устройства будут отвечать своими сетевыми учетными данными.GCDAsyncsocket для всех IP-адресов

С GCDAsyncSocket, если я использую определенный IP-адрес, я могу получить ответ. Но я не уверен, как передавать это сообщение всем IP-адресам в сети.

My Code: udpSocket = [[GCDAsyncUdpSocket alloc] initWithDelegate: self delegateQueue: dispatch_get_main_queue()];

- (void)setupSocket 
{ 
    NSError *error = nil; 


    if (![udpSocket bindToPort:0 error:&error]) 
    { 
     [self logError:FORMAT(@"Error binding: %@", error)]; 
     return; 
    } 
    if (![udpSocket beginReceiving:&error]) 
    { 
     [self logError:FORMAT(@"Error receiving: %@", error)]; 
     return; 
    } 
    [udpSocket enableBroadcast:YES error:&error]; 
    if (error != nil) 
    { 
     NSLog(@"Error enableing broadcast: %@", [error description]); 
     return; 
    } 

    [self logInfo:@"Ready"]; 
} 

- (IBAction)send:(id)sender 
{ 
    NSString *host = addrField.text; 
    NSError *error = nil; 


    NSData *data = [msg dataUsingEncoding:NSUTF8StringEncoding]; 
    [udpSocket sendData:data toHost:host port:port withTimeout:-1 tag:tag]; 


    [self logMessage:FORMAT(@"SENT (%i): %@", (int)tag, msg)]; 

    tag++; 
} 

Теперь, как я могу заставить его отправлять все IP-адреса, а не только один IP-адрес? В оригинальной PC Java приложения, я могу увидеть что-то вроде

socket = new DatagramSocket(30303); 
      socket.setBroadcast(true); 
      InetAddress address = InetAddress.getByName("255.255.255.255"); 
      packet = new DatagramPacket(str.getBytes(), 
        str.length(), address, 30303); 

      socket.send(packet); 

И я хочу сделать то же самое на это приложение. Цените некоторую помощь.

+0

Что было для вас? Должно ли оно быть 255.255.255.255? – user523234

+0

Ну, есть несколько адресов хостов. Я хочу передать всем, чтобы все аппаратные устройства, которые идентифицировали сообщение, ответят обратно. Мой ноутбук, который отправляет udp через симулятор iphone, скажет 192.168.2.1. Тогда есть несколько устройств, таких как 192.168.2.3, 2.34.2.101 и т. Д., На которые я хотел бы получить ответ. В настоящее время, если я укажу один адрес хоста (скажем, 192.168.2.34), я могу получить ответ. – aVC

+0

Я основывал свой комментарий на вашем java-коде, который отправил сообщение на адрес 255.255.255.255. Отправка дейтаграммы UDP на этот адрес доставляет сообщение любому хосту в сегменте локальной сети. – user523234

ответ

2

Я использовал ту же самую библиотеку сокетов в моем Ios приложении для тех же целей (поиск устройства по сети) кода я использовал был ..

_broadcastSocket = [[GCDAsyncUdpSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()]; 
if ([_broadcastSocket enableBroadcast:YES error:&error] == false) { 
     NSLog(@"Failed to enable broadcast, Reason : %@",[error userInfo]); 
    } 
[_broadcastSocket sendData:data toHost:@"255.255.255.255" port:5944 withTimeout:-1 tag:5]; 

Вызова sendata функции сокета с объектом NSData будет транслировать данные на все IP-адреса в сети, прослушивая данный порт.

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