首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OS X:如何使用NSRunLoop查看套接字读取事件?

OS X:如何使用NSRunLoop查看套接字读取事件?
EN

Stack Overflow用户
提问于 2010-02-16 23:33:19
回答 1查看 2.1K关注 0票数 1

我在写一个Cocoa应用。应用程序中有一个套接字,每当套接字变得可读时,我希望从套接字中读取数据,处理数据,并相应地更新用户界面。我希望在主循环中集成读取事件检查,即,我希望将套接字附加到主循环,并在套接字变为可读时让主循环调用回调。

我已经编写了一个测试应用程序,但由于某种原因,它无法工作:

代码语言:javascript
复制
#include <stdio.h>
#include <Foundation/NSAutoReleasePool.h>
#include <Foundation/NSRunLoop.h>
#include <Foundation/NSPort.h>

@interface MyDelegate : NSObject <NSPortDelegate> {
}
- (void)handlePortMessage:(NSPortMessage *)portMessage;
@end

@implementation MyDelegate
- (void)handlePortMessage:(NSPortMessage *)portMessage {
    printf("Haiz\n");
}
@end

int
main() {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    NSSocketPort *server = [NSSocketPort alloc];
    MyDelegate *foo = [MyDelegate alloc];
    [server initWithTCPPort: 1234];
    [server setDelegate: foo];
    [[NSRunLoop mainRunLoop] addPort: server forMode: NSDefaultRunLoopMode];
    [[NSRunLoop mainRunLoop] run];
    [pool release];
    return 0;
}

该应用程序应该侦听本地主机端口1234,并且每当有人连接到服务器或向服务器发送数据时,该应用程序都应该在控制台上打印"Haiz“。然而,这个应用程序什么也不做。套接字已创建,我可以telnet到端口1234,但应用程序不会将任何内容打印到控制台。

我做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2012-05-27 03:46:33

您希望以现在的方式使用NSSocketPort,但随后要创建一个NSFileHandle来接受套接字上的连接。正如您所期望的,您可以在主线程上获得回调,首先是新连接,然后是这些连接上的数据。使用这个O'Reilly article,忽略HTTP的东西。

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

https://stackoverflow.com/questions/2273976

复制
相关文章

相似问题

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