首页 > 解决方案 > 使用超时实现 RDT 3.0 协议

问题描述

我正在尝试实现以下协议:

在此处输入图像描述

特别是 S1、S2 和 S3 阶段

我的想法:
我在 socket.setSoTimeout() 中设置了一个超时,它在 socket.recieve() 上返回一个 SocketTimeOutException 我不确定这是否是实现它的正确方法,如图所示,似乎计时器应该在之后立即启动发送数据包。
我实现了以下内容:

rSocket.setSoTimeout(timeOut);
try {
    rSocket.receive(packet);
}catch(SocketTimeoutException socketTimeoutException){
    return null;
}
senderSocket.send(datagramPacket);
    Packet responsePacket = Helper.recievePacket(rSocket);
    while(responsePacket==null){
        senderSocket.send(datagramPacket);
         responsePacket = Helper.recievePacket(rSocket);
    }
    if(responsePacket.isCorrupt() || responsePacket.getSequence()!=packetToSend.getSequence())
    {
        
    }

这确实处理了由于响应延迟而发生超时的部分。但是程序必须等到if条件不满足。并在超时的情况下再次发送数据包并等待响应。我不确定我可以在这里使用哪些 Java 编程结构。

标签: javasocketsnetwork-programming

解决方案


推荐阅读