iPhone SDK通过服务器发送/接收数据
我正在构建一个需要向服务器发送数据并响应服务器数据的IPhone应用程序(第一个)。作为一个.net开发人员,我通过2个调用(GetData和SendData)创建带有1个参数的Web服务,该参数以XML数据发送。这些将发送和接收包括媒体内容的呼叫,例如照片。iPhone SDK通过服务器发送/接收数据
还有什么其他选择需要向服务器发送数据(媒体)以及从服务器发送数据(什么是正反两方面)?
如果你希望尽量减少你的代码,你可以从你的服务器的快速HTTP应答用这样的方法调用:
NSURL* url = [NSURL URLWithString:@"http://mysite.com/my_page.html"];
NSStringEncoding encoding;
NSError* error = nil;
NSString* pageData = [NSString stringWithContentsOfURL:url
usedEncoding:&encoding error:&error];
// Now pageData is a string with the html from that URL, or error will indicate
// any network error that occurred.
NSData
有一个名为dataWithContentsOfURL:options:error:
可以处理正从二进制数据类似的方法一台服务器。这两种方法都是同步的,这意味着您的代码在等待服务器响应时被阻塞 - 至少在超时命中或检测到错误之前。
对于异步网络通信,您可以使用NSURLConnection
其他的方法,其还与相关类NSURLRequest
,NSURLResponse
和NSURL
。学习这个最快的方法是浏览the NSURLConnection
docs。这里的some example code of how to write an asynchronous HTTP get使用这些类。
我假设你主要考虑HTTP传输,上面的类可以处理大多数交互,包括不同的HTTP请求类型(例如post vs get),不同的编码类型或二进制数据,允许你的应用程序处理每个数据包到达时,挂接到http级重定向,设置自定义超时等。
还有更多的通信方式,例如使用Bonjour,它可以协助无服务器设置(例如两个iPhones共享一个Wi-Fi连接);或者可以处理对等蓝牙连接的Game Kit,并且具有专为游戏内语音通信而设计的支持。
.Net有很好的SOAP支持。但是在iPhone上使用SOAP是一件可怕的事情,它不是很好的支持,即使它对于可能非常轻量级的调用来说是一个非常沉重的协议。
查看哪些类型的REST库可用于.Net--它们将更容易消耗并降低带宽。还有iPhone的REST包装器。
在开发用于移动通信的任何服务器时,应尽可能避免使用SOAP。
一个选项是使用Hessian。 Hessian是一种用于Web服务的语言不可知协议,以及用于发送消息调用和响应的二进制序列化。 Hessian的一些优点:
- 因为不需要文本编码,Hessian对于传输二进制数据块要好得多。
- 二进制序列化协议比任何XML,JSON或其他文本格式都要严格得多,这意味着解析更简单快捷。
- 有可用于服务器端和客户端的框架,可以将传输方法抽象为分布式对象。允许你专注于你的应用程序,而不是协议细节。
您可以在中实现服务器。NET使用HessianC#。黑森州是根据各地的接口,所以你可以定义在C#这个接口:
public interface HelloService {
string GetGreeting();
}
那你会再与罢了实现比:
public class HelloHandler : CHessianHandler, HelloService {
public string GetGreeting() {
return "Hello World";
}
}
在iPhone方面,你可以使用HessianKit设置客户端。这是分两步进行,首先将C#interace必须转换成Objective-C的协议:
@protocol HelloService
-(NSString*)GetGreeting;
@end
然后,你需要得到一个代理Web服务来回回此接口/协议:
id<HelloService> proxy = [CWHessianConnection proxyWithURL:url
protocol:@protocol(HelloService)];
NSLog([proxy GetGreeting]);
任何示例代码,请你帮我,我们如何在iPhone项目中添加Hessian Kit。我对它很陌生,所以需要帮助来了解我们如何使用Hessian Kit – iPhoneDev 2010-05-07 11:32:22