我正在尝试为微芯片平台实施一个IP发现者应用程序。我正在使用GCDAsyncSocket来执行此操作。如果我发送特定消息,所有感兴趣的设备都将使用其网络凭据进行响应。
使用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 :(得分: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对象调用socket的sendata函数会将数据广播到侦听给定端口的网络上的所有ip。