如何使用Obj-c串联发送套接字消息

时间:2014-12-27 17:58:52

标签: objective-c sockets udp nstimer nsrunloop

我目前正在使用CocoaAsyncSocket将UDP套接字消息发送到服务器。有时我需要强制执行消息以特定顺序到达。基本上我的代码结构类似于下面。

NSMutableArray *msgs = @[@0, @1, @2].mutableCopy; 


-(void)sendMessages:(NSString *)str{
// blackbox function that converts to nsdata and sends to socket server
}

通常,我不关心订单,所以我只是盲目地发送个人信息。对于非常具体的命令,这不起作用。我在java中有一个示例,它生成一个新线程并在0.2秒的时间跨度后发送消息。我希望在Objective-C中找到更优雅的解决方案。有人对方法有任何建议吗?

1 个答案:

答案 0 :(得分:1)

保证UDP的特定数据包到达顺序就像为邮政系统做同样的事情。

如果您将国家A的两封信件发送到B国,则无法确定哪一封信先到达。哎呀,他们中的一个(或者甚至两个人)甚至可能会迷路而且根本不会到达。在第一个字母后第二个字母发送第二个字母会增加“正确”排序的可能性,但不保证任何内容。

维护顺序的唯一方法是向数据包添加序列号并在接收端缓冲它们。然后,一旦相关数据包到达并按序列号排序,您就将它们交付给处理。请注意,这意味着您还需要一个丢失数据包的重新传输机制,因此如果数据包1和3到达但2没有,则发送方知道在继续之前发送丢失的数据包。这就是TCP所做的。