2012-03-13 37 views

回答

4

從頭文件:

* Binds the UDP socket to the given address, specified as a sockaddr structure wrapped in a NSData object. 
* 
* If you have an existing struct sockaddr you can convert it to a NSData object like so: 
* struct sockaddr sa -> NSData *dsa = [NSData dataWithBytes:&remoteAddr length:remoteAddr.sa_len]; 
* struct sockaddr *sa -> NSData *dsa = [NSData dataWithBytes:remoteAddr length:remoteAddr->sa_len]; 

所以,你需要一個sockaddr

#include <netinet/in.h> 
#include <arpa/inet.h> 

struct sockaddr_in ip; 
ip.sin_family = AF_INET; 
ip.sin_port = htons(6003); 
inet_pton(AF_INET, "0.0.0.0", &ip.sin_addr); 

NSData * discoveryHost = [NSData dataWithBytes:&ip length:ip.sin_len]; 

這裏有sockaddr一些文檔 - 在Xcode 5.1.1本http://www.beej.us/guide/bgnet/output/html/multipage/sockaddr_inman.html

+4

與iOS 7.1 SDK代碼似乎需要一些調整。 'inet_pton()'似乎在''中聲明,除了''(用於'sockaddr'結構)以外,還需要''sa_len'成員用於調用' - [NSData dataWithBytes:length]'應該是'sin_len'(不確定這是否最初是打字錯誤或SDK中的更改)。 – Jasarien 2014-08-18 14:19:20

+0

你不能自己設置'ip.sin_len'。它不是神奇的初始化。你必須初始化它。你可以將它設置爲'sizeof(ip)'。 – 2016-11-25 04:01:27