首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS -如何创建网络套接字的读写流?

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

Stack Overflow用户
提问于 2011-02-28 10:23:04
回答 2查看 2.6K关注 0票数 1

我是iOS开发的新手。我正在尝试创建一个读写流。我正在使用CFNetworking编程指南中的示例来尝试实现一些功能。

我正在尝试在run循环上安排读取流,以解决流阻塞的问题。我马上就遇到了问题。如何使用CFHhostCreateWithAddress创建CFHost对象?这是我到目前为止所知道的:

代码语言:javascript
复制
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吗?

非常感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-28 10:35:45

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

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

使用CFHostCreateWithName:

代码语言:javascript
复制
CFHostRef CFHostCreateWithName (
   CFAllocatorRef allocator,
   CFStringRef hostname
);

您可能知道,您可以将NSString *转换为CFStringRef,或者使用宏CFSTR()创建一个常量CFStringRef。

票数 2
EN

Stack Overflow用户

发布于 2011-08-09 12:56:07

代码语言:javascript
复制
+ (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];
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5137659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档