iphone应用程序如何与服务器交互?

iphone应用程序如何与服务器交互?,iphone,objective-c,cocoa-touch,xcode,Iphone,Objective C,Cocoa Touch,Xcode,我是一名新的程序员,对iPhone开发和服务器方面的东西还不熟悉。我有很多问题要问 你不必回答所有的问题;感谢您的帮助 iPhone应用程序如何与服务器交互 是否有一种特定类型的服务器我应该用来与iphone应用程序和服务器交互 如果没有特定类型的服务器,那么可以使用哪种服务器 它们的优点和缺点是什么 为了与服务器交互,iPhone应用程序(即客户端)应该做什么 服务器如何知道向哪个iPhone发送数据 为了与iPhone应用程序(客户端)交互,服务器应该做什么 最好的办法是让iPhone向we

我是一名新的程序员,对iPhone开发和服务器方面的东西还不熟悉。我有很多问题要问

你不必回答所有的问题;感谢您的帮助

  • iPhone应用程序如何与服务器交互
  • 是否有一种特定类型的服务器我应该用来与iphone应用程序和服务器交互
  • 如果没有特定类型的服务器,那么可以使用哪种服务器
  • 它们的优点和缺点是什么
  • 为了与服务器交互,iPhone应用程序(即客户端)应该做什么
  • 服务器如何知道向哪个iPhone发送数据
  • 为了与iPhone应用程序(客户端)交互,服务器应该做什么

  • 最好的办法是让iPhone向web服务器发出web请求。您的iPhone应用程序就像web浏览器一样,向web服务器发出http请求,并解析响应

    我现在正在构建一个应用程序,它可以点击我编写的用于数据库工作等的PHP脚本,并返回JSON对象。这并不奇怪——我本可以构建一个完整的SOAP或RPC web服务,但我没有这样做,它只是用查询字符串参数生成GET请求

    有一些你想知道的方便的图书馆。谷歌“iPhone JSON”查找Stig Brautaset编写的JSON库,这似乎是大多数人都在使用的JSON库。此外,与其让自己经历iPhone内置web客户端框架所需的所有困难,不如去获取ASIHTTPRequest,这是一个非常强大且非常简化的web客户端库


    一般来说,您希望在服务器上执行尽可能多的处理。例如,在我的应用程序中有一个地方,我正在搜索发生在用户指定的本地坐标范围内的事件(“距离我10英里以内”)。我编写了PHP来构建纬度/经度边界框,并基于此从数据库进行查询。这比将一系列事件记录下来,然后询问核心位置以计算它们与我所处位置的距离要快得多。

    您已经问了很多问题,因此我将尽力回答所有问题:

    首先,你需要更清楚一点,你说的是什么类型的服务器?电子邮件服务器、web服务器、lolcat服务器,这要看情况而定

    在基本层面上,iphone通过互联网进行通信。互联网使用互联网协议,有两个标准协议建立在IP之上:传输控制协议和用户数据报协议。每个都有自己的用途和功能

    TCP/IP和UDP/IP构成了internet通信的主干

    一个更具体的应用程序协议构建在这两个互联网协议之上,具有特定于给定应用程序的格式。例如,HTTP是通过TCP在Web服务器与Web浏览器客户端之间传输HTML和其他Web信息的标准协议

    因此,您的iPhone将使用与服务器通信所需的任何协议。对于更常见的服务器通信,iOS SDK提供了构造消息的方法(例如,如果您希望向web服务器发出HTTP请求,可以使用
    initWithContentsOfURL
    发送GET请求)


    如果您构建了一个自定义服务器,那么您需要在iphone上构建所需的消息协议,并使用TCP或UDP(无论您的自定义服务器期望什么)将其发送到服务器。

    HTTP是一个非常健谈的协议。如果你需要高效上网怎么办?谢谢Dan!我有一个问题,通过使用ASIHTTPRequest库,我可以从URL获取数据,对吗?例如httlp://someurl.com/somephp.php. 如果两部iPhone同时调用该url呢?那么服务器如何知道它是哪个iphone呢?我还有一个问题。在您的例子中,通过使用ASIHTTPRequest,您可以从url获取JSON对象,对吗?这意味着你正在服务器端创建JSON对象并将其发送到iphone客户端,然后在客户端内部,应用程序将解码JSON对象并执行一些逻辑正确吗?@Alan:实际上,你可能可以处理HTTP的开销。如果没有,那么您可以访问套接字库,并可以自己滚动。如果您知道HTTP不适合您,那么您可能知道如何使用原始套接字@大卫:“服务器怎么知道它是哪部iphone呢?”它不知道。如果您需要识别正在攻击您的用户,那么您在服务器上的第一次攻击应该是登录名和密码。您可以返回一些标识数据,这些数据可以保存在iPhone的内存中(或者使用NSUserDefaults在会话之间保存)。然后在每个后续请求中将该ID作为参数传递。您对JSON进程的分析完全正确。我使用PHP JSON库将PHP数据对象转换为JSON消息,然后使用iPhone上的JSON库将其转换为本机数据结构。@David:“服务器如何知道它是哪部手机”的问题就像问“web服务器如何知道Firefox的哪个副本发出请求?”我的意思是,它将向提出请求的人答复请求,你不必担心这一部分。除此之外,它不知道任何特定客户的身份。谢谢艾伦!至于您的问题,是否可以在不发送电子邮件的应用程序上使用电子邮件服务器?(而是发送数据)。或者可以在不发送web数据而是发送电子邮件的应用程序上使用web服务器吗?现在我甚至不知道我的iphone应用程序应该使用哪种服务器。。。另外,关于HTTP请求如何工作,是否像是您使用该api,例如initWithContentsOfURL,然后获取一个信息,假设有两个iphone都调用该url,那么服务器如何知道它是哪个iphone?您不会在应用程序上使用服务器(服务器处理客户端连接并处理来自客户端的服务请求——您的应用程序可能是客户端,而不是服务器)