互联网上有几篇关于如何使udp可靠的文章。我无法在c#上找到一个。所以也许我可以实现我的算法。
通过互联网研究,我相信udp有两个问题:如果您有兴趣了解我为什么要使udp可靠以及为什么我不使用tcp而是看看this question。相信我,我一直试图做tcp打孔这么久。
无论如何可能已经有一个我可以使用c#的库,这将使我能够做到这一点。因为我已经注意到能够找到一个库,我一直在考虑以下算法:
“想象一下,有计算机A和计算机B,计算机A是将文件发送到计算机B的那个”;
以下是我一直在考虑的步骤:
1)计算机A打开文件进行读取,假设它是5000字节。这意味着计算机A必须向计算机B发送5000个字节,以确保没有字节丢失,并且顺序正确。
2)计算机A得到文件的前500个字节,它得到那些字节的哈希值。所以现在计算机A有两个东西,即500字节的散列和字节。 (哈希将是一个有效的算法,如md5,以确保以正确的顺序接收数据。即md5(1,2,3)!= md5(2,1,3))
3)成像前500字节的哈希值为kj82lkdi930fi1。
4)计算机B应该监听哈希和字节。
8)计算机A用其哈希码发送接下来的500个字节。
8)由于计算机A在一段合理的时间内没有收到1,1,1,1,1或2,2,2,2,2,那么A将发送相同的字节并再次哈希第二次。
9)假设计算机B收到散列和字节,但是字节是以不同的顺序接收的。当计算机B计算这些字节的哈希值时,该哈希值将与收到的哈希值不匹配。因此,它将回复{2,2,2,2,2,2}
10)如果计算机A收到2,2,2,2,2,2那么它将发送相同的字节和散列。如果它由于某种原因没有收到2,2,2,2,2那么它将在一段时间后发送相同的字节和散列。让我们假装计算机A收到2,2,2,2,2
13)让假冒计算机A没有收到来自B的1,1,1,1响应。然后它会在第四次发送相同的字节。
15)算法继续如此,直到文件被转移。
我的意思是显然我还需要为此算法添加一些其他内容,例如让计算机B知道传输何时完成。也许检查更多的错误。如果计算机A长时间断开连接会发生什么。但是主协议将类似于我描述的协议。
那么你认为我应该开始实现这个算法吗?我应该每次增加并发送更多字节。我的意思是发送1000而不是500?互联网上有很多文章告诉你几种技术,但很少有一些文章能给你一个关于你想要的语言的工作实例。在这种情况下,我需要在c#中使用它。