CFSocketSetAddress терпит неудачу, если не IP хост-компьютера?
Я делаю простое приложение WOL. Пока я могу успешно создать сокет, однако при установке адреса с помощью CFSocketSetAddress я могу использовать только сетевой ip моего компьютера (WiFi ip = 192.168.0.5) или локальный ip (127.0.0.1).
Для WOL я хотел бы отправить данные на широковещательный адрес (255.255.255.255). Если это введено, я возвращаюсь с ошибкой "адрес не может быть установлен".
Я пропускаю-понимание использования CFSocketSetAddress, и адрес предполагается, что это IP-адрес хоста или IP-адрес назначения? В любом случае, что мне нужно сделать, чтобы мой IP-адрес назначения был широковещательным адресом?
Ниже приведена часть моего кода:
/*************************************************************************/
struct sockaddr_in addr;
memset(&addr, 0, sizeof(addr));
addr.sin_len = sizeof(addr);
addr.sin_family = AF_INET;
addr.sin_port = htons(PORT); //port
inet_aton(IP, &addr.sin_addr);//IP is the host network ip: 192.168.0.5
NSData *address = [NSData dataWithBytes: &addr length: sizeof(addr)];
if (CFSocketSetAddress(WOLsocket, (CFDataRef)address) != kCFSocketSuccess){
NSLog(@"Address could not be set!");
}
2 ответа:
Я решил свою проблему с помощью другого метода (получил собственный сокет), а затем вместо использования CFSocketSetAddress я передал адрес во втором аргументе CFSocketSendData.
У меня нет ссылки/ссылки для изменений, так как это был какой-то код, сохраненный на моем жестком диске со времен тяжелого Гугла.
Хотел бы поблагодарить Дэвида Гелхара, который указал мне правильное направление из моего предыдущего вопроса .
Для любого другого, кому это может понадобиться, это мой кодекса;
//Gets native & sets options /*************************************************************************/ int desc = -1; desc = CFSocketGetNative(WOLsocket); int yes = 1; if (setsockopt (desc, SOL_SOCKET, SO_BROADCAST, (char *)&yes, sizeof (yes)) < 0) { NSLog(@"Set Socket options failed"); return EXIT_FAILURE; } //sets address socket - doesn't bind this is done in CFSocketSendData /*************************************************************************/ unsigned long bcast = 0xffffffff; struct sockaddr_in addr; memset(&addr, 0, sizeof(addr)); addr.sin_len = sizeof(addr); addr.sin_family = AF_INET; addr.sin_port = htons(PORT); //port addr.sin_addr.s_addr = bcast; NSData *address = [NSData dataWithBytes: &addr length: sizeof(addr)]; //Sends Data /*************************************************************************/ char ethadd []= "helloworld"; CFDataRef Data = CFDataCreate(NULL, (const UInt8*)ethadd, sizeof(ethadd)); if (CFSocketSendData(WOLsocket, address, Data, 0) < 0){ NSLog(@"Data could not be sent!"); return EXIT_FAILURE; } else NSLog(@"Data Sent"); }