如何通过iOS上的套接字下载和发布二进制数据?

时间:2013-10-15 21:59:04

标签: iphone ios objective-c sockets tcp

我被要求构建一个下载二进制数据的应用程序的一部分,并通过套接字将某些二进制数据发回服务器。原因是他们需要快速交易。

过去我只使用带有JSON / XML的Web服务。

有人能指出我正确的方向,我需要学习如何执行这些功能吗?

由于

2 个答案:

答案 0 :(得分:2)

首先,在套接字上执行二进制文件并不能保证“快速闪电”。您需要确保您发送的内容紧凑,并且可以在接收端快速处理。

话虽这么说,我建议使用协议缓冲区来处理数据。它紧凑,经过良好测试,易于在服务器和客户端上处理:https://code.google.com/p/protobuf/。这将让您在.proto文件中很好地定义域对象,并在客户端和服务器应用程序之间共享这些对象。甚至支持使用protoc生成objective-c:https://code.google.com/p/metasyntactic/wiki/ProtocolBuffers。请注意,协议缓冲区本身实际上并不提供在套接字上使用的协议,但您可以使用一个非常简单的协议,例如使用协议缓冲区的长度写入4个字节,然后紧跟协议缓冲区本身(https://developers.google.com/protocol-buffers/docs/techniques#streaming )。

就如何发送它而言,CocoaAsyncSocket是在iOS上编写基于套接字的应用程序的好方法:https://github.com/robbiehanson/CocoaAsyncSocket。然后,您的应用可以像构建protobuf对象一样简单,在其上调用data方法以提取NSData *表示,然后使用GCDAsyncSocket的{​​{1}}方法发送它

接收将是相同的。当您在writeData上的代理被通知有可用数据时,请将其读出并解析为您的协议缓冲区实例。

答案 1 :(得分:1)

Developer.apple.com目前似乎已关闭,因此此链接可能不完全正确,但结帐CFSocket表示Apple直接公开的TCP套接字功能。它是所有Core Foundation C的东西,但是你最终得到的是一堆相关的回调函数,每当事务进入时都会调用它们,以及一个调用发送数据的函数。