首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何定义通信协议?

如何定义通信协议?
EN

Stack Overflow用户
提问于 2011-05-10 13:33:56
回答 1查看 1.3K关注 0票数 0

我对网络概念很陌生,需要对如何实现用于发送不同类型消息的通信协议进行说明。我目前正在开发一个可在iPhones之间发送视频信息的可可应用程序。目前,我只发送类型3的消息。下面是我需要实现的应用程序流:

  1. 在网络上浏览可用的iPhones (使用Bonjour)
  2. 当找到iPhone客户端时,发送NSData“请求联系人信息”(MessageType1) iPhone客户端将发送一个带有联系人信息(MessageType2)的NSData实例。
  3. 在一个新的消息与录制的视频,发送到选定的联系人(MessageType3)

当接收到不同类型的消息时,需要对它们进行不同的处理。我想解决这个问题的一种方法是在消息中添加一个标头,以标识消息类型并在接收方提取它,然后这样处理:

代码语言:javascript
复制
if (messageType == 1)  // MessageType1
    [self sendMyContactInfo:(Contact *)ownInfo];

if (messageType == 2)  // MessageType2
    [self updateViewWithContactInfo:(Contact *)contactInfo];

if (messageType == 3)  // MessageType3
    [self sendMessageToSelectedContact:(Message *)message]

为了为MessageType3创建消息,我将这样做:

代码语言:javascript
复制
/* Not currently implemented */
NSMutableData *data = [[NSMutableData alloc] init];
int messageType = 3;
[data appendBytes:messageType]

/* Already Implemented */
NSData *encodedMessage = [NSKeyedArchiver archivedDataWithRootObject:message];
[data appendData:encodedMessage];

[self sendMessage:(NSData *)encodedMessage];

这样做好吗?如果是这样的话,协议规则是否应该以更正式的方式定义,例如在单独的类或其他方面?我在这里寻找最好的整体解决方案,所以如果有更好的方法,不要太在意我的图纸.

EN

回答 1

Stack Overflow用户

发布于 2011-05-10 14:26:20

这样做好吗?

这是定义通信协议的标准方法。来自维基百科文章

数字消息位串被交换。位串在字段中被划分,每个字段携带与该协议相关的信息。从概念上说,位串分为标题区和数据区两部分。实际消息存储在数据区域中,因此报头区域包含与协议更相关的字段。传输的大小是有限的,因为传输错误的数量与所发送的位串的大小成正比。长度大于最大传输单元(MTU)的位串被分成适当大小的段。每个片段具有几乎相同的标题区域内容,因为只有一些字段依赖于数据区域的内容(尤其是CRC字段,其中包含根据数据区域内容计算的校验和)。

结束维基百科引文

如果是这样的话,协议规则是否应该以更正式的方式定义,例如在单独的类或其他方面?

那随你的便。没有必要,因为您的应用程序正在与应用程序的其他副本通信。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5950893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档