CFSocketSendData不会发送数据?

时间:2011-07-25 02:00:12

标签: sockets udp send

我是客观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 个答案:

答案 0 :(得分:1)

您的代码段中没有包含CFSocketCreate(...)代码,但我认为您选择了默认值,PF_INET系列和TCP协议。

使用TCP协议,设置地址是不够的,您需要建立一个 连接到目标端点。

首先调用函数...

CFSocketConnectToAddress (WOLsocket, address, 10.0);

然后发送您的数据......

CFSocketSendData(WOLsocket, NULL, Data, 0)