Я подключаю машину 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, но я действительно хочу использовать это.