Objective c iOS-如何创建对网络套接字的读写流?

Objective c iOS-如何创建对网络套接字的读写流?,objective-c,c,ios,Objective C,C,Ios,我是iOS开发新手。我正在尝试创建读写流。我正在使用《CFNetworking编程指南》中的示例来尝试使某些功能正常工作 我试图在运行循环上安排读取流,以解决流阻塞的问题。我马上就遇到了问题。如何使用CFHhostCreateWithAddress创建CFHost对象?以下是我到目前为止的情况: NSString *address = @"irc.ubuntu.net"; CFDataRef addressDataRef = (CFDataRef)[address dataUsingEncodi

我是iOS开发新手。我正在尝试创建读写流。我正在使用《CFNetworking编程指南》中的示例来尝试使某些功能正常工作

我试图在运行循环上安排读取流,以解决流阻塞的问题。我马上就遇到了问题。如何使用CFHhostCreateWithAddress创建CFHost对象?以下是我到目前为止的情况:

NSString *address = @"irc.ubuntu.net";
CFDataRef addressDataRef = (CFDataRef)[address dataUsingEncoding:NSASCIIStringEncoding];

CFHostRef host = CFHostCreateWithAddress(kCFAllocatorDefault, addressDataRef);

//Create Read and Write Stream
CFStreamCreatePairWithSocketToCFHost(kCFAllocatorDefault, host, 8008, &readStream, &writeStream);
第二线炸弹。有人能告诉我如何创建CFHostRef吗

非常感谢

声明CFHostCreateWithAddress()的第二个参数必须是“包含主机地址的sockaddr结构的CFDataRef对象。此值不得为NULL。”

您正在传递一个表示“irc.ubuntu.net”的CFDataRef,它决不是sockaddr结构

使用CFHostCreateWithName:

CFHostRef CFHostCreateWithName (
   CFAllocatorRef allocator,
   CFStringRef hostname
);
您可能知道,可以将NSString*强制转换为CFStringRef,或者使用宏CFSTR()创建常量CFStringRef

+ (NSData *)dataForIPAddress:(NSString *)address {
  struct addrinfo hints;
  struct addrinfo *result = NULL;
  memset(&hints, 0, sizeof(hints));
  hints.ai_flags = AI_NUMERICHOST;
  hints.ai_family = PF_UNSPEC;
  hints.ai_socktype = SOCK_STREAM;
  hints.ai_protocol = 0;
  int errorStatus = getaddrinfo([address cStringUsingEncoding:NSASCIIStringEncoding], NULL, &hints, &result);
  if (errorStatus != 0) return nil;
  CFDataRef addressRef = CFDataCreate(NULL, (UInt8 *)result->ai_addr, result->ai_addrlen);
  if (addressRef == nil) return nil;
  freeaddrinfo(result);
  return [(NSData *)addressRef autorelease];
}