клиентская сторона в MAC OS X получает пустые ответы (используя сокеты BSD и NSFileHandle Какао) - PullRequest
1 голос
/ 09 ноября 2010

Я подключаю машину linux (выступающей в качестве сервера) и машину Mac (в качестве клиента) с помощью сокетов bsd.Из-за улучшения Какао я устанавливаю 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];

Как вы видите, я установил "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 я печатаю то, что получаю, и перед отправкой обратноЯ проверяю, что есть что-то.

Я знаю, что могу использовать обычные bsd сокеты на Mac, но я действительно хочу использовать это.

1 Ответ

0 голосов
/ 10 ноября 2010

Не следует ли добавить наблюдателя перед вызовом readInBackgroundAndNotify?Ваше сообщение может быть прочитано и пропущено к тому времени, когда ваш процесс приступит к этому.

...