CFSocketSendData не будет отправлять данные? - PullRequest
0 голосов
/ 25 июля 2011

Я новичок в объективной сети C.Я собрал код ниже для простого приложения WOL.Я могу успешно создать сокет, а затем установить адрес (я могу установить только адрес локальной машины, но это другой вопрос).Однако при попытке отправить данные с использованием CFSocketSendData данные не отправляются (отображается сообщение «Данные не отправлены»).Я правильно использую CFSocketSendData, или есть проблема в другом месте?

Любая помощь будет принята с благодарностью, спасибо.

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 network IP of the machine e.g 192.168.0.2


        NSData *address = [NSData dataWithBytes: &addr length: sizeof(addr)];

        if (CFSocketSetAddress(WOLsocket, (CFDataRef)address) != kCFSocketSuccess){
            NSLog(@"Address could not be set!");
       }
        else{
            NSLog(@"Address set");
            char ethadd []= "helloworld";
            CFDataRef Data = CFDataCreate(NULL, (const UInt8*)ethadd, sizeof(ethadd));
            if (CFSocketSendData(WOLsocket, NULL, Data, 0) < 0){
                NSLog(@"Data could not be sent!");
            }
            else NSLog(@"Data Sent");
        }

1 Ответ

1 голос
/ 18 мая 2012

Вы не включили код CFSocketCreate(...) в свой фрагмент, но я предполагаю, что вы выбрали значения по умолчанию, семейство PF_INET и протокол TCP.

При использовании протокола TCP установка адреса недостаточна, необходимо установить подключение к конечной точке назначения.

Сначала вызовите функцию ...

CFSocketConnectToAddress (WOLsocket, address, 10.0);

затем отправьте свои данные ...

CFSocketSendData(WOLsocket, NULL, Data, 0)

...