首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用CFSocket的简单异步客户端

使用CFSocket的简单异步客户端
EN

Stack Overflow用户
提问于 2011-10-11 11:53:06
回答 1查看 4.5K关注 0票数 0

另外,我对BSD套接字也很熟悉,我对Obj和Cocoa都很陌生,所以请容忍我:)

我正在尝试的是控制台应用程序中的一个简单的TCP客户机,它只是在后台接收数据。我想为此使用CFSockets,因为它具有方便的回调函数(使用自治线程中的普通套接字实现它不是问题,但我想用Mac方式来实现)。

我被困住的地方是,如何在没有RunLoop的情况下使用回调函数,或者如何使RunLoop以非阻塞方式运行。据我所知,不可能将RunLoop放入GCD中(至少我尝试过,循环永远不会运行)。那么有什么可供选择的呢?可以在RunLoop中运行NSThread吗?还有更简单的方法吗?

下面是我使用的代码片段。它作为一项任务工作很好。

代码语言:javascript
复制
CFSocketRef TCPClient;
CFSocketContext CTX = { 0, "MYCLIENT", NULL, NULL, NULL };
TCPClient = CFSocketCreate(NULL, PF_INET, SOCK_STREAM, IPPROTO_TCP,
    kCFSocketReadCallBack, (CFSocketCallBack)ConnectCallBack, &CTX);
[...]
CFDataRef connectAddr = CFDataCreate(NULL, (unsigned char *)&addr, sizeof(addr));
CFSocketConnectToAddress(TCPClient, connectAddr, −1);
CFRunLoopSourceRef sourceRef = CFSocketCreateRunLoopSource(kCFAllocatorDefault, TCPClient, 0);
CFRunLoopAddSource(CFRunLoopGetCurrent(), sourceRef, kCFRunLoopCommonModes);
CFRelease(sourceRef);
CFRunLoopRun();

提前感谢!托马斯

EN

回答 1

Stack Overflow用户

发布于 2011-10-11 12:24:56

我推荐AsyncSocket,一个目标c轻量级框架(仅几个文件),带有可选的GDC,非常好地用mac方式编码。

AsyncSocket是一个封装CFSocket和CFStream的TCP/IP套接字网络库。它提供异步操作,并提供带有委托支持的原生可可类。

您可以(通过委托方法)将其配置为使用当前run循环或任何其他run循环。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7725617

复制
相关文章

相似问题

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