我必须用Java做一个bittorrent应用程序项目,它需要通过UDP协议而不是TCP传输数据。在这个项目中,老师要求我确保UDP协议的可靠性。所以我在互联网上搜索了一些解决方案,发现在java中有一些类,例如" ReliableSocket"和" ReliableServerSocket"。所以我想知道这些课程可以满足我的项目要求。这两个类之间有什么区别?
非常感谢你的帮助
答案 0 :(得分:0)
UDP是一种在IP协议之上运行的有损不可靠协议。与TCP(处理可靠通信的所有方面)不同,应用层可以处理丢弃的数据包和“可靠”传输协议的其他方面。因此,任何需要可靠性的实现都可能会产生额外的开销。
您可以预留两个端口port A
和port B
。除非丢包,否则每个端口都是单向的。
client 1 = port A = server 2
server 1 = port B = client 2
这使事情变得简单。服务器只是定期发送数据并监听,但只有在客户端丢弃信号时才接收消息。
客户是否定的。它接收信号,只有在丢失数据包时才发送。另一种实现方式是客户端/服务器对可以相互通信,使端口真正单向。
我们通过使用两个数据包索引在两个端口上获得消息可靠性。
client index 1 = server index 2
server index 1 = client index 2
每个字节的索引都是单字节,并在客户端发送新消息时递增。假定消息传递直到接收到特殊消息,该特殊消息将是用于丢弃分组的UDP消息。根据设计的字节顺序以及消息的索引,它会将丢弃消息的信号包含在最重要或最不重要的位/字节中。队列似乎也是必要的,但我还没有详细说明。