Я придерживаюсь очень простой концепции здесь. Я использую GCDAsyncsocket для своего проекта. Это запрос типа ответа клиента, в котором я получаю XML-файл с сервера (на основе Java) через сокет, я читаю этот файл, сохраняя его в каталоге документа приложения, анализирую теги запроса, отправляя кому-то еще, получаю ответ на соответствующий запрос и пишите в файл xml, добавляя ответы после каждого соответствующего запроса и отправляя его обратно на сервер.Чтение файла xml через GCDAsyncsocket в iOS
Я пробовал читать файл, но я получаю данные в байтах, я полагаю, я не могу декодировать эти данные в соответствующем формате. Может кто-нибудь помочь мне в том, как я могу прочитать xml-файл через сокет (GCDAsyncsocket) и сохранить его в мой каталог приложений документов
Вот основной код, который я использую: - - (IBAction) подключения: (ID) отправитель {
NSString *hostAddress = self.serverTextfield.text;
uint16_t port = PORT;
_delegateQueue = dispatch_queue_create("com.a.cs.delegateQueue", NULL);
asyncSocket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:_delegateQueue];
DDLogInfo(@"Connecting to %@ on port %hu...", hostAddress, port);
NSError *error = nil;
if (![asyncSocket connectToHost:hostAddress onPort:port error:&error])
{
DDLogError(@"Oops Error Connecting.. %@",error);
self.notificationTextView.text = @"Oops Error Connecting";
} else {
DDLogVerbose(@"Connected");
self.notificationTextView.text = @"Connected";
}
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *uniqueID = [defaults objectForKey:@"UUID"];
NSLog(@"%@",uniqueID);
NSUInteger len = [uniqueID lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
Byte buffer[2];
buffer[0] = (0xff & (len >>8));
buffer[1] = (0xff & (len));
NSMutableData *outData = [NSMutableData dataWithCapacity:2];
[outData appendBytes:buffer length:2];
[outData appendData:[uniqueID dataUsingEncoding:NSUTF8StringEncoding]];
NSLog(@"%@",outData);
[asyncSocket writeData:outData withTimeout:-1 tag:0];
[asyncSocket readDataWithTimeout:-1 tag:0];
}
Это мой метод действия который вызывается при нажатии кнопки na med "Connect". Я выписываю некоторые данные, отправляя их на сервер, и начинаю читать данные, а в делегате didReadData выполняю манипуляции с данными, полученными с сервера, и снова вызываю
[sock readDataWithTimeout: -1 tag: 0]; так что он непрерывно прослушивает прочитанные данные ...
Теперь вместо строковых данных, которые я получаю с сервера, я ожидаю XML-файл, который мой сервер будет отправлять мне .. Как читать этот файл и манипулировать им ?? Также как я могу отправить файл на сервер, который я сохранил в каталоге документа приложения. Любая помощь будет оценена.
Вы дали нам немного времени для продолжения. Говоря, что вы «пытались прочитать файл», я обеспокоен тем, что вы не прочитали документацию GCDAsyncSocket, «Начало работы» и «Общие ошибки», и вместо этого надеетесь, что GCDAsyncSocket обладает магическим методом «readXMLstream», который вы пропустили. Так как это не так, концепция чтения файла не применяется на уровне, где вы взаимодействуете с библиотекой. Какой метод -readData ... вы используете? Что вы делаете с этими данными? И да, GCDAsyncSocket видит только данные, а не более глубокое понимание этих данных. – tobinjim
@tobinijm - Я обновил свое сообщение выше ... Извините за задержку !! – user2606782
Спасибо за предоставление дополнительной информации. В общем, stackoverflow здесь, чтобы ответить на конкретные вопросы больше о «почему эта ошибка кода?» или «Почему мой взгляд всегда черный, хотя я ...», чем вопросы о подходе или обзоре кода. Я думаю, вы просите о помощи в передаче данных XML, которые были отправлены вам, но вы не предоставили этот код. Сказать, что это не очень полезно для вас, поэтому я собираюсь опубликовать «ответ», который может продолжить диалог за пределами комментариев. – tobinjim