2015-03-30 4 views
0

Я придерживаюсь очень простой концепции здесь. Я использую 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-файл, который мой сервер будет отправлять мне .. Как читать этот файл и манипулировать им ?? Также как я могу отправить файл на сервер, который я сохранил в каталоге документа приложения. Любая помощь будет оценена.

+0

Вы дали нам немного времени для продолжения. Говоря, что вы «пытались прочитать файл», я обеспокоен тем, что вы не прочитали документацию GCDAsyncSocket, «Начало работы» и «Общие ошибки», и вместо этого надеетесь, что GCDAsyncSocket обладает магическим методом «readXMLstream», который вы пропустили. Так как это не так, концепция чтения файла не применяется на уровне, где вы взаимодействуете с библиотекой. Какой метод -readData ... вы используете? Что вы делаете с этими данными? И да, GCDAsyncSocket видит только данные, а не более глубокое понимание этих данных. – tobinjim

+0

@tobinijm - Я обновил свое сообщение выше ... Извините за задержку !! – user2606782

+0

Спасибо за предоставление дополнительной информации. В общем, stackoverflow здесь, чтобы ответить на конкретные вопросы больше о «почему эта ошибка кода?» или «Почему мой взгляд всегда черный, хотя я ...», чем вопросы о подходе или обзоре кода. Я думаю, вы просите о помощи в передаче данных XML, которые были отправлены вам, но вы не предоставили этот код. Сказать, что это не очень полезно для вас, поэтому я собираюсь опубликовать «ответ», который может продолжить диалог за пределами комментариев. – tobinjim

ответ

0

Первое, на что я бы посмотрел, если вы еще этого не сделали, это SimpleHTTPClient проект, который GCDAsyncSocket включен в загрузку. XML doctype - это полезная нагрузка внутри HTTP-пакетов, поэтому это подходящий проект для моделирования вашей модели.

Тем не менее, вы уверены, что ваш код отправляет на ваш сервер то, что ожидает сервер? Он ожидает не больше, чем UUID строки UTF8? Он не ожидает, что UUID будет завернут в XML? Регистрирует ли сервер входящие запросы на соединение так, как вы можете видеть, что он получает то, что ожидает, и фактически возвращает вам XML?

+0

@ tobinjim- Я изучил это уже ... Но это не то, что мне нужно ... Мне просто нужен способ, с помощью которого я могу отправлять файлы с клиента (iOS) на сервер (Java) и наоборот с помощью GCDAsyncSocket .. Моя конечная цель - сравнить XML-сервер, который есть на сервере, и который я отправил после манипуляции с моей стороны. Так что вы можете быть более конкретным и на самом деле дать мне знать, как я могу это достичь. Я действительно застрял здесь. – user2606782

+0

Ну, вы уверены, что a) Сервер Java понял ваш запрос, b) отправил обратно то, что вы ожидали, и c) GCDAsyncSocket разместил это в буфере данных, который вы ожидаете? Если вы знаете все это, чтобы быть правдой, я думаю, что вам нужен класс NSXMLParser, начиная с -initWithData: передавать вызов в NSData, который GCDAsyncSocket заполняет для вас. – tobinjim

 Смежные вопросы

  • Нет связанных вопросов^_^