iPhone SDK通过服务器发送/接收数据

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其他的方法,其还与相关类NSURLRequestNSURLResponseNSURL。学习这个最快的方法是浏览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]); 
+0

任何示例代码,请你帮我,我们如何在iPhone项目中添加Hessian Kit。我对它很陌生,所以需要帮助来了解我们如何使用Hessian Kit – iPhoneDev 2010-05-07 11:32:22