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

标签 iphone ios objective-c sockets tcp

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

过去我只使用 JSON/XML 的网络服务。

有人可以指出我需要学习什么才能执行这些功能的正确方向吗?

谢谢

最佳答案

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

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

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

接收也是一样的。当您的代表在 GCDAsyncSocket被告知有数据可用,将其读出并将其解析到您的 Protocol Buffer 实例。

关于iphone - 如何通过 iOS 上的套接字下载和发布二进制数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19391857/

相关文章:

iphone - 向下移动 UITabBarItem 图像?

ios - 获取不到的崩溃

ios - 即使使用 ARC 和 imageFilePath,动画也会因内存而终止

ios - 如何在 iOS 8/9 中获取今日扩展的宽度

iphone - 应用程序是否有可能并且有必要实现零内存泄漏?

javascript - HTML 5 地理定位在 Safari 中不起作用

iphone - UITableView NSInternalInconsistencyException 抛出错误;一个单元格有两个动画

ios - 如何使用ImagePicker获取图片名称?我得到图像名称,但它只能在模拟器中使用,不能在实际设备中使用

ios - 如何从我的文档目录加载 TMX map ?

iphone - 用图像填充自定义表格 View 单元格