在iOS中通过GCDAsyncsocket读取xml文件

在iOS中通过GCDAsyncsocket读取xml文件,ios,sockets,gcdasyncsocket,Ios,Sockets,Gcdasyncsocket,我在这里被一个非常基本的概念困住了。我一直在为我的项目使用GCDAsyncsocket。它是一种请求-响应类型的客户端,我通过套接字从服务器Java获取一个xml文件,我读取该文件并将其保存在应用程序的文档目录中,解析发送给其他人的请求标记,获取对应请求的响应,并将其写入xml文件,在每个请求之后追加响应,并将其发送回服务器 我尝试读取该文件,但我得到的数据是字节,我想,我无法将该数据解码为适当的格式。有人可以帮助我如何通过socketGCDAsyncsocket读取xml文件并将其保存到我的应

我在这里被一个非常基本的概念困住了。我一直在为我的项目使用GCDAsyncsocket。它是一种请求-响应类型的客户端,我通过套接字从服务器Java获取一个xml文件,我读取该文件并将其保存在应用程序的文档目录中,解析发送给其他人的请求标记,获取对应请求的响应,并将其写入xml文件,在每个请求之后追加响应,并将其发送回服务器

我尝试读取该文件,但我得到的数据是字节,我想,我无法将该数据解码为适当的格式。有人可以帮助我如何通过socketGCDAsyncsocket读取xml文件并将其保存到我的应用程序文档目录中吗

以下是我一直使用的基本代码:- -IBActionconnect:idsender{

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];
}

这是我的action方法,它在名为Connect的按钮单击时被调用。我写下一些数据,将其发送到服务器并开始读取数据,在委托didReadData中,我对从服务器收到的数据进行操作,然后再次调用 [sock readDataWithTimeout:-1标记:0];这样它就可以连续监听读取的数据


现在,我期望的不是从服务器获取的字符串数据,而是服务器将发送给我的XML文件。。如何读取此文件并对其进行操作??另外,我如何将保存在应用程序文档目录中的文件发送回服务器。。任何帮助都将不胜感激

如果您还没有看到的话,我要看的第一件事是下载中包含的GCDAsyncSocket的SimpleHTTPClient项目。XML doctype是HTTP数据包中的有效负载,因此它是一个合适的项目,可以为您的数据包建模


也就是说,您确定您的代码正在向服务器发送服务器期望的内容吗?它只需要一个UTF8字符串UUID?它不希望UUID被包装成XML吗?服务器是否以某种方式记录传入的连接请求,您可以看到它得到了预期的结果,并且实际返回给您XML?

您没有给我们什么可以继续的。通过说您尝试阅读了该文件,我担心您没有阅读GCDAsyncSocket文档、入门和常见陷阱,而是希望GCDAsyncSocket有一个您错过的神奇的readXMLstream方法。由于没有,读取文件的概念不适用于与库交互的级别。哪个-读取数据。。。你用什么方法?你如何处理这些数据?是的,GCDAsyncSocket只看到数据,而不是更高层次的数据理解。@tobinijm-我已经更新了上面的帖子。。。抱歉耽搁了!!感谢您提供更多信息。一般来说,stackoverflow在这里是为了回答一些特定的问题,更多的问题是为什么这个代码会出错?或者为什么我的观点总是黑色的,即使我。。。。与方法或代码审查相关的问题不同。我认为您正在请求帮助处理发送给您的XML数据,但您尚未提供该代码。说这对你没有多大帮助,所以我将发布一个可以在评论之外继续对话的答案。你读取数据的GCDAsyncDelegate方法是什么样子的?@tobinjim-我已经研究过了。。。但这不是我需要的。。。我只需要一种方法,通过它我可以使用GCDAsyncSocket将文件从ClientiOS发送到ServerJava,反之亦然。。我的最终目标是比较服务器拥有的XML和我在结束操作后发送的XML。所以你能更具体一点,让我知道我如何做到这一点。。我真的被困在这里了。那么,你确定Java服务器理解了你的请求,b发回了你所期望的,c GCDAsyncSocket已经将其放入了你所期望的数据缓冲区吗?如果您知道所有这些都是真的,那么我认为您需要NSXMLParser类,从-initWithData:call开始,传入GCDAsyncSocket为您填充的NSData。