我正在为我的iPhone应用编写服务器应用程序。我正在处理的部分是中继服务器。这个服务器通过TCP套接字在iPhone之间中继消息。服务器从流中读取头的长度,然后从流中读取相应数量的字节。它反序列化头,并检查消息是否需要中继到另一个iPhone(而不是在服务器上处理)。
如果需要中继,则开始从发送者的套接字中每次读取1024字节。在接收到每1024字节后,它将这些字节(作为字节“数据包”)添加到传出消息队列中,按顺序处理。
这一切都很好,但是如果发送者被中断了怎么办(例如,在发送3,000字节中的2,500字节后,发送者的iPhone进入了隧道)?
这意味着所有其他设备都在等待剩余的500字节,但这些字节没有被中继给他们。然后,如果发送者(或其他任何人)向这些套接字发送数据,它们会认为新消息的开头是上一个消息的结尾,从而破坏数据。
显然,根据上述描述,我正在使用消息分帧,但我认为我漏掉了什么。从我所看到的,消息分帧似乎只允许接收者知道从套接字中读取的确切字节数,然后将它们组装成一个对象。一旦有一个或两个字节走失,会不会让一切都变得混乱?是否有一种标准方法可以重新同步?
如果需要中继,则开始从发送者的套接字中每次读取1024字节。在接收到每1024字节后,它将这些字节(作为字节“数据包”)添加到传出消息队列中,按顺序处理。
这一切都很好,但是如果发送者被中断了怎么办(例如,在发送3,000字节中的2,500字节后,发送者的iPhone进入了隧道)?
这意味着所有其他设备都在等待剩余的500字节,但这些字节没有被中继给他们。然后,如果发送者(或其他任何人)向这些套接字发送数据,它们会认为新消息的开头是上一个消息的结尾,从而破坏数据。
显然,根据上述描述,我正在使用消息分帧,但我认为我漏掉了什么。从我所看到的,消息分帧似乎只允许接收者知道从套接字中读取的确切字节数,然后将它们组装成一个对象。一旦有一个或两个字节走失,会不会让一切都变得混乱?是否有一种标准方法可以重新同步?