2013-12-15 44 views
1

我試圖爲微芯片平臺實施IP發現者應用程序。我正在使用GCDAsyncSocket來做到這一點。如果我發送特定消息,則所有感興趣的設備都將使用其網絡憑證進行響應。GCDAsyncsocket廣播到所有IP

與GCDAsyncSocket,如果我使用特定的IP,我可以得到一個響應。但我不知道如何將此消息廣播到網絡中的所有IP。

我的代碼: 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

好吧,有多個主機地址。我想廣播給所有人,以便所有識別該消息的硬件單元都會迴應。我的筆記本電腦通過iPhone模擬器發送udp是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]; 

調用與NSData對象插座的sendata功能將數據廣播到監聽給定端口的網絡上的所有ip。