2012-03-13 87 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