Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android &引用;原子性“;在两个设备之间的通信中_Android_Communication - Fatal编程技术网

Android &引用;原子性“;在两个设备之间的通信中

Android &引用;原子性“;在两个设备之间的通信中,android,communication,Android,Communication,我想将短数据从设备A(发送方)发送到设备B(接收方),这样如果设备B将保存数据,那么设备A必须将其从存储器中删除 如果B不保存或A不删除,则必须恢复通信(就好像根本没有通信一样) 通信是在不稳定的信道上进行的,所以很有可能发生这种情况 在某个地方被打破 我应该如何处理这个问题 可以是C++(< P>)TCP(可靠、有序、错误检查传递)的算法: A将数据发送给B B保存数据 B向A发送OK A永久删除数据 B只保留数据(不删除) 例外情况: 如果某些步骤失败,请不要执行下一步 如果B没有从A接收

我想将短数据从设备A(发送方)发送到设备B(接收方),
这样如果设备B将保存数据,那么设备A必须将其从存储器中删除

如果B不保存或A不删除,则必须恢复通信(就好像根本没有通信一样)

通信是在不稳定的信道上进行的,所以很有可能发生这种情况 在某个地方被打破

我应该如何处理这个问题

可以是C++(

< P>)TCP(可靠、有序、错误检查传递)的算法:

  • A将数据发送给B
  • B保存数据
  • B向A发送OK
  • A永久删除数据
  • B只保留数据(不删除)
  • 例外情况:

    • 如果某些步骤失败,请不要执行下一步
    • 如果B没有从A接收到OK,则B不会永久保存数据
    • 如果A没有从B收到OK,A不会永久删除数据
    按节点详细说明:

    A

  • 将数据发送到B
  • 等待OK
  • 收到OK
  • 删除数据
  • B

  • 接收数据
  • 保存数据
  • 发送OK
  • 收到OK

  • 通常,保存数据比确保只有一台设备拥有数据更重要。因此,从这个意义上讲,您的方法不是故障安全的。假设第4步失败,那么我们将永久丢失数据。因此,只有当我们没有数据而不是重复数据(不太可能的要求)时,您的算法才会工作。如果第4步失败,您将不会执行第5步!没有数据丢失。必须有一种方法知道它,这样就可以了。当然你有。如果您使用的是TCP,如果B没有收到,连接将失败。它是TCP(可靠、有序、错误检查的交付)。如果你没有在超时前收到OK,这是一个失败,你必须回滚。如果你假设a知道B是否收到它,那么你必须假设B知道a是否收到它。那你为什么还要这样做呢?您只需要3,这样A就知道B没有存储问题(如硬盘故障)