我在这里坚持一个非常基本的概念。我一直在为我的项目使用GCDAsyncsocket。它是客户端的请求响应类型,其中我从服务器(基于Java)通过套接字获取xml文件,我读取此文件将其保存在App的文档目录中,解析请求标签发送给其他人,获取对相应请求的响应,并将其写入xml文件,在每个相应请求后追加响应并将其发送回服务器。
我尝试读取文件,但我得到的字节数据我想,我无法将数据解码为适当的格式有人可以帮助我如何通过套接字读取xml文件(GCDAsyncsocket)并将其保存到我的app文档目录
以下是我一直使用的基本代码: - - (IBAction)connect:(id)sender {
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];
}
这是我的动作方法,它在名为" Connect"的按钮点击时被调用。我写出一些数据发送到服务器并开始读取数据,并在委托didReadData我操作从服务器收到的数据再次调用
[sock readDataWithTimeout:-1 tag:0];这样它就能不断地听取读数据......
现在代替我从服务器获取的字符串数据,我期待一个XML文件,我的服务器将发送给我..我如何阅读此文件并操纵它?另外,我如何将文件发送到我保存在我的应用程序文档目录中的服务器..任何帮助将不胜感激..
答案 0 :(得分:0)
我要看的第一件事,如果你还没有,是GCDAsyncSocket包含在下载中的SimpleHTTPClient项目。 XML doctype是HTTP数据包中的有效负载,因此它是一个适合您的模型的项目。
那就是说,你确定你的代码正在向服务器发送服务器所期望的内容吗?它只是一个UTF8字符串UUID?是不是期望UUID被包装在XML中?服务器是否以某种方式记录传入的连接请求,您可以看到它正在获得它所期望的并且实际上正在向您返回XML?