2011-07-25 33 views
0

我是客觀C網絡的新手。我已經將下面的代碼放在一個簡單的WOL應用程序中。我可以成功創建一個套接字,然後設置一個地址(我只能設置本地機器地址,但那是另一個問題)。 但是,當試圖使用CFSocketSendData發送數據時,它不會發送數據(數據未發送消息顯示)。 我是否正確使用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

你沒有包括在片段中CFSocketCreate(...)代碼,但我認爲你選擇了違約,PF_INET家庭和TCP協議。

使用TCP協議,設置地址不夠用,您需要建立到您的目標端點的 連接。

首先調用函數...

CFSocketConnectToAddress (WOLsocket, address, 10.0);

然後把你的數據...

CFSocketSendData(WOLsocket, NULL, Data, 0)