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);
我希望做同樣的這個程序。感謝一些幫助。
你的東道主價值是多少?它應該是255.255.255.255? – user523234
好吧,有多個主機地址。我想廣播給所有人,以便所有識別該消息的硬件單元都會迴應。我的筆記本電腦通過iPhone模擬器發送udp是192.168.2.1。然後有多個設備,如192.168.2.3,2.34,2.101等,我想從中得到迴應。目前,如果我指定一個主機地址(比如說192.168.2.34),我可以得到響應。 – aVC
我基於我對你給定的java代碼的評論,它發送了一條消息到255.255.255.255。向此地址發送UDP數據報將消息傳遞給本地網段上的任何主機。 – user523234