繁体   English   中英

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

[英]client side on MAC OS X gets empty responses (using BSD sockets and Cocoa's NSFileHandle)

我正在使用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];

如您所见,我在“观察者”上设置了“过程”以处理服务器响应。 此方法执行以下操作。

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常规套接字,但我真的很想这么做。

在调用readInBackgroundAndNotify之前不应该添加观察者吗? 您的消息可以在过程完成时被读取和消失。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM