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

IPhone SDK通过服务器发送/接收数据,iphone,objective-c,iphone-sdk-3.0,Iphone,Objective C,Iphone Sdk 3.0,我正在构建一个IPhone应用程序(第一个),它需要向服务器发送数据,并从服务器返回数据。作为一名.net开发人员,我想创建一个web服务,使用2个调用(GetData和SendData),其中1个参数发送XML数据。这些将发送和接听电话,其中包括媒体内容,例如图片 我必须向服务器发送数据(媒体)和从服务器发送数据(媒体)还有哪些其他选项,它们的优缺点是什么?如果您想最小化编码,可以通过如下方法调用从服务器获得快速HTTP回复: NSURL* url = [NSURL URLWithString

我正在构建一个IPhone应用程序(第一个),它需要向服务器发送数据,并从服务器返回数据。作为一名.net开发人员,我想创建一个web服务,使用2个调用(GetData和SendData),其中1个参数发送XML数据。这些将发送和接听电话,其中包括媒体内容,例如图片


我必须向服务器发送数据(媒体)和从服务器发送数据(媒体)还有哪些其他选项,它们的优缺点是什么?

如果您想最小化编码,可以通过如下方法调用从服务器获得快速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
有一个类似的方法,名为,可以处理从服务器获取二进制数据。这两种方法都是同步的,这意味着您的代码在等待服务器响应时会被阻塞——至少在超时命中或检测到错误之前是如此

对于异步网络通信,您可以使用
NSURLConnection
中的其他方法,该方法也适用于配套类
NSURLRequest
nsurresponse
NSURL
。了解这一点的最快方法是浏览。下面是使用这些类的示例

我假设您考虑的主要是HTTP传输,上面的类可以处理这些传输 大多数交互,包括不同的HTTP请求类型(如post和get)、不同的编码类型或二进制数据,允许应用程序在每个数据包到达时处理数据包,连接到HTTP级别的重定向,设置自定义超时等


还有更多的通信方式,如使用,这有助于无服务器设置(如两部iPhone共享wi-fi连接);或者,它可以处理点对点蓝牙连接,并支持游戏中的语音通信。

如果您想最小化编码,可以通过如下方法调用从服务器获得快速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
有一个类似的方法,名为,可以处理从服务器获取二进制数据。这两种方法都是同步的,这意味着您的代码在等待服务器响应时会被阻塞——至少在超时命中或检测到错误之前是如此

对于异步网络通信,您可以使用
NSURLConnection
中的其他方法,该方法也适用于配套类
NSURLRequest
nsurresponse
NSURL
。了解这一点的最快方法是浏览。下面是使用这些类的示例

我假设您考虑的主要是HTTP传输,上面的类可以处理这些传输 大多数交互,包括不同的HTTP请求类型(如post和get)、不同的编码类型或二进制数据,允许应用程序在每个数据包到达时处理数据包,连接到HTTP级别的重定向,设置自定义超时等


还有更多的通信方式,如使用,这有助于无服务器设置(如两部iPhone共享wi-fi连接);或者,它可以处理点对点蓝牙连接,并支持游戏中的语音通信。

.Net具有强大的SOAP支持。但是在iPhone上使用SOAP是一件很糟糕的事情,它没有得到很好的支持,即使它得到了很好的支持,对于可能非常轻量级的呼叫来说,它也是一个非常重的协议

看看.Net有哪些类型的REST库可用——它们更容易使用,带宽更低。iPhone也有REST包装


在为移动通信开发任何服务器时,如果可能的话,您应该避免使用SOAP。

.Net具有强大的SOAP支持。但是在iPhone上使用SOAP是一件很糟糕的事情,它没有得到很好的支持,即使它得到了很好的支持,对于可能非常轻量级的呼叫来说,它也是一个非常重的协议

看看.Net有哪些类型的REST库可用——它们更容易使用,带宽更低。iPhone也有REST包装


在为移动通信开发任何服务器时,如果可能的话,您应该避免使用SOAP。

一个选择是使用Hessian。Hessian是用于web服务的语言无关协议,以及用于发送消息、调用和响应的二进制序列化。Hessian的一些优点:

  • Hessian更适合传输二进制数据块,因为不需要文本编码
  • 二进制序列化协议比任何XML、JSON或其他文本格式都要严格得多,这意味着它更容易、更快地解析
  • 服务器端和客户端都有可用的框架,可以将传输方法抽象为分布式对象。允许您专注于应用程序,而不是协议细节
您可以使用在.NET中实现服务器。Hessian基于接口,因此您可以在C#中定义此接口:

然后您只需执行以下操作:

public class HelloHandler : CHessianHandler, HelloService {
  public string GetGreeting() {
    return "Hello World";
  }
}
在iPhone端,您可以使用来设置客户端。这分两步完成,首先必须将C#interace转换为Objective-C协议:

@protocol HelloService
-(NSString*)GetGreeting;
@end
然后,您需要从以下接口/协议获取web服务的代理:

@protocol HelloService
-(NSString*)GetGreeting;
@end
id<HelloService> proxy = [CWHessianConnection proxyWithURL:url
                                                  protocol:@protocol(HelloService)];
NSLog([proxy GetGreeting]);
id proxy=[CWHESSIANConconnection proxyWithURL:url
协议:@protocol(HelloService)];
NSLog([proxy GetGreeting]);

一种选择是使用Hessian。Hessian是用于web服务的语言无关协议,以及用于发送消息、调用和响应的二进制序列化。Hessian的一些优点:

  • Hessian更适合传输二进制数据块,因为不需要文本编码
  • 二进制序列化协议比任何XML、JSON或其他文本格式都要严格得多,这意味着它更容易、更快地解析
  • 服务器端和客户端都有可用的框架,可以将传输方法抽象为分布式对象。允许您专注于应用程序,而不是协议