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 4

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");
    }

Для моего приложения Проблема заключается в том, что оно было изолировано, но не получило сетевых разрешений.

Если вы используете песочницу приложений, вам нужно проверить один из следующих параметров:

Раздел "песочница приложений" настроек проекта с отметкой " входящие соединения (сервер)"