Objective c MAC OS X上的客户端获得空响应(使用BSD套接字和Cocoa&x27;的NSFileHandle)

Objective c MAC OS X上的客户端获得空响应(使用BSD套接字和Cocoa&x27;的NSFileHandle),objective-c,c,cocoa,sockets,Objective C,C,Cocoa,Sockets,我正在使用bsd套接字连接一台linux机器(作为服务器)和一台Mac机器(作为客户端)。由于Cocoa的改进,我以通常的方式设置bsd套接字,然后将其封装到NSFileHandle对象上。我正在使用此对象从服务器发送和接收消息 协议如下:Linux从Mac获取一条消息,并立即将该消息回显到Mac 在我得到消息之前一切都很顺利。我的mac电脑收到的信息是空的 这是我在发送信息时所做的 const char *toSend = [line cStringUsingEncoding:NSASCIIS

我正在使用bsd套接字连接一台linux机器(作为服务器)和一台Mac机器(作为客户端)。由于Cocoa的改进,我以通常的方式设置bsd套接字,然后将其封装到NSFileHandle对象上。我正在使用此对象从服务器发送和接收消息

协议如下:Linux从Mac获取一条消息,并立即将该消息回显到Mac

在我得到消息之前一切都很顺利。我的mac电脑收到的信息是空的

这是我在发送信息时所做的

const char *toSend = [line cStringUsingEncoding:NSASCIIStringEncoding];
printf("message to send %s\n", toSend);
//[self writeData:[line dataUsingEncoding: encoding]];

[self writeData:[NSData dataWithBytes:toSend length:strlen(toSend)]];
[self readInBackgroundAndNotify];
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc addObserver:observer selector:@selector(process:) name:NSFileHandleReadCompletionNotification object:self];
如您所见,我在“observer”上设置了“process”来处理服务器响应。此方法执行以下操作

NSFileHandle *fh = [notification object];
NSData *data = [fh availableData];
NSString *dataString = [[NSString alloc]
                        initWithData:data
                        encoding:NSASCIIStringEncoding];

printf("server says %s\n", [dataString cStringUsingEncoding:NSASCIIStringEncoding]);    
[dataString release];
在控制台上,我得到:“服务器说”就这些

在Linux端,我正在打印我得到的东西,在将它发送回之前,我检查是否有东西


我知道我可以在Mac上使用bsd常规套接字,但我真的很想使用它。

在调用ReadInBackground和Notify之前,您是否应该添加观察者?当您的进程开始执行此操作时,您的消息可能会被读取并消失。

请将您提供的代码发布到编译器。您的
addObserver:
行无法按原样编译,因为您忘记了
@selector()
指令。您是对的,我在编写时拼写错误。。我有@selector(process:)指令