如何创建IP地址和端口以与NSData一起使用

eem*_*bee 4 sockets objective-c

我正在使用一个名为的库,GCDAsyncUDPSocket并且有一种方法要求我将IP地址和端口作为传递NSData

谢谢您的帮助。

mat*_*way 5

从头文件:

 * 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];
Run Code Online (Sandbox Code Playgroud)

因此,您需要一个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];
Run Code Online (Sandbox Code Playgroud)

以下是一些文档-http sockaddr: //www.beej.us/guide/bgnet/output/html/multipage/sockaddr_inman.html

  • 对于Xcode 5.1.1中的iOS 7.1 SDK,此代码似乎需要进行一些调整。“ inet_pton()”似乎在“ &lt;arpa / inet.h&gt;”中声明,除了“ &lt;netinet / in.h&gt;”(用于“ sockaddr”结构)和“ sa_len”成员之外,还需要使用它。在调用-[NSData dataWithBytes:length]时使用的应该是“ sin_len”(不确定是最初是拼写错误还是SDK中的更改)。 (4认同)