java - 使用超时实现 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 编程结构。
解决方案
推荐阅读
- mysql - 表中没有记录时无法获取地理点
- javascript - 如何仅通过在最新版本的 Selenium IDE Chrome 扩展中运行命令来获取编号
- ruby-on-rails - Datagrid Rails:隐藏标题
- sql - sql server 按分区名称截断表的分区
- amazon-web-services - EB CLI - 如何抑制代码提交提示“您希望继续使用 CodeCommit?”
- twitter-bootstrap - 如何使用 Bootstrap Vue 在移动设备上将按钮大小从默认更改为 sm?
- sql - 试图弄清楚如何按季度显示计算结果
- angular - 将现有的 angular 5 项目转换为 ionic 3 项目
- log4j2 - 如何将 Log4j 2 与 flink 应用程序一起使用
- python - 客户端服务器端实时对象检测