DHCP协议-CSP认证

文章目录

    • DHCP协议

DHCP协议

stringstream的用法

image-20240822102304216

应用实践

#include<bits/stdc++.h>using namespace std;signed main()
{string s="wo shi wwl, also wlw";stringstream ss;ss<<s;while(ss>>s){if(s[s.size()-1]==',') s[s.size()-1]=' ';cout<<s<<endl;}return 0;
}
#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
#include<vector> using namespace std;
const int MAXNAME=20;
int cnt=1;struct IP
{int id;int status;
}struct MESSAGE
{char send[MAXNAME];char rec[MAXNAME];char type[4];IP ip;int ddl;int start;
}mes[M];void predo()
{string s;getline(cin,s);stringstream ss;int start,ip,ddl;string send,rec,type;ss<<s;ss>>start,ss>>send,ss>>rec;ss>>type,ss>>ip,ss>>ddl;mes[cnt].start=start;mes[cnt].send=send;mes[cnt].rec=rec;mes[cnt].type=type;mes[cnt].ip=ip;mes[cnt].ddl=ddl;
}signed main()
{int N,Tdef,Tmax,Tmin;string H;cin>>N>>Tdef>>Tmax>>Tmin;cin>>H;int n;cin>>n;for(int i=1;i<=n;i++){predo();if(mes[cnt].send!=H&&mes[cnt].send!="*"){if(mes[cnt].type!="REQ") continue;}else if(mes[cnt].type!="REQ"||mes[cnt].type!="DIS"){continue;}else if(mes[cnt].send==H){if(mes[cnt].type=="DIS")continue;//在想一个怎么样能够很好判断是否占用的数据结构if(checkip(mes[cnt]))}else if(mes[cnt].send=="*"){if(mes[cnt].type!="DIS")continue;}cnt++;}return 0;
}
#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
#include<vector> using namespace std;
const int MAXNAME=20,MAXN=1e4+10;int N,Tdef,Tmax,Tmin;
string H;int start,ip,ddl;
string send,rec,type;int cnt=1;struct MESSAGE
{char send[MAXNAME];char rec[MAXNAME];char type[4];IP ip;int ddllow;int ddlup;int start;
}mes[M];bool ips[MAXN];bool checkmes(int ip)
{if(ips[ip]){return true;}else{int unsenip=0,minip=0;for(int i=1;i<=N;i++){//判断完是否有未分配最小或者过期最小后需要把那个最小的成员变量全部更新;//怎么去更新?//一个ip的截止时间能否在一开始就算出来if(unsenip==0&&ips[i].start==0){unsenip=i;}if(minip==0&&ips[i].time<cnt){minip=i;}}int resip=0;if(unsenip){resip=unsenip;}if(minip){resip=minip;}if(!resip){ips[resip]=1;//mes[++cnt].ip=resip;//ip是一个结构体if(!ddl){mes[cnt].ddl=cnt+Tdef;}else{}mes[cnt].send=send;mes[cnt].rec=H;mes[cnt].type=type;mes[cnt].start=start;mes[cnt].ddllow=start+Tmin;mes[cnt].ddlup=start+Tmax;return true;}}return false;
}signed main()
{cin>>N>>Tdef>>Tmax>>Tmin;cin>>H;int n;cin>>n;for(int i=1;i<=n;i++){string s;getline(cin,s);stringstream ss;ss<<s;ss>>start,ss>>send,ss>>rec;ss>>type,ss>>ip,ss>>ddl;if(send!=H&&send!="*"){if(type!="REQ") continue;}else if(type!="REQ"||type!="DIS"){continue;}else if(send==H){if(type=="DIS")continue;//在想一个怎么样能够很好判断是否占用的数据结构if(!checkmes()) continue;}else if(send=="*"){if(type!="DIS")continue;}cnt++;}return 0;
}
#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
#include<vector> using namespace std;
const int MAXNAME=20,MAXN=1e4+10;int N,Tdef,Tmax,Tmin;
string H;int start,ip,ddl;
string send,rec,type;int cnt=1;struct MESSAGE
{char send[MAXNAME];char rec[MAXNAME];char type[4];IP ip;int ddl;int start;
}mes[M];bool ips[MAXN];bool checkDISmes(int ip)
{if(ips[ip]){return true;}else{int unsenip=0,minip=0;for(int i=1;i<=N;i++){//判断完是否有未分配最小或者过期最小后需要把那个最小的成员变量全部更新;//怎么去更新?//一个ip的截止时间能否在一开始就算出来if(unsenip==0&&ips[i].start==0){unsenip=i;}if(minip==0&&ips[i].time<cnt){minip=i;}}int resip=0;if(unsenip){resip=unsenip;}if(minip){resip=minip;}if(!resip){ips[resip]=1;//mes[++cnt].ip=resip;//ip是一个结构体if(!ddl){mes[cnt].ddl=cnt+Tdef;}else{//如果请求的时间没有过长或者过短,都可以设置为读入的ddlif(cnt+Tmin<=ddl&&cnt+Tmax>=ddl){mes[cnt].ddl=ddl;}else{mes[cnt].ddl=0;}}//到此处处理完DIS报文再发送REQ报文的任务//对ip分成单独一个结构题的感觉愈加明显//mes应该不用分配结构体,只需要对其进行处理,然后分配ip//修改ip状态mes[cnt].send=send;mes[cnt].rec=H;mes[cnt].type=type;mes[cnt].start=start;return true;}}return false;
}signed main()
{cin>>N>>Tdef>>Tmax>>Tmin;cin>>H;int n;cin>>n;for(int i=1;i<=n;i++){string s;getline(cin,s);stringstream ss;ss<<s;ss>>start,ss>>send,ss>>rec;ss>>type,ss>>ip,ss>>ddl;if(send!=H&&send!="*"){if(type!="REQ") continue;}else if(type!="REQ"||type!="DIS"){continue;}else if(send==H){if(type=="DIS")continue;//在想一个怎么样能够很好判断是否占用的数据结构if(!checkDISmes()) continue;}else if(send=="*"){if(type!="DIS")continue;}cnt++;}return 0;
}

处理报文,分配IP,修改ip状态,那返回报文的部分需要怎么处理呢?

#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
#include<vector> using namespace std;
const int MAXNAME=20,MAXN=1e4+10;int N,Tdef,Tmax,Tmin;
string H;int start,ip,ddl;
string send,rec,type;int T;int cnt=1;struct MESSAGE
{char send[MAXNAME];char rec[MAXNAME];char type[4];IP ip;int ddl;int start;
}mes[M];vector<int> ips[MAXN];bool checkREQmes()
{if(rec!=H){}
}bool checkDISmes()
{if(ips[ip].size){return true;}else{int unsenip=0,minip=0;for(int i=1;i<=cnt;i++){//判断完是否有未分配最小或者过期最小后需要把那个最小的成员变量全部更新;//怎么去更新?//一个ip的截止时间能否在一开始就算出来if(unsenip==0&&mes[i].ddl==0){unsenip=i;}if(minip==0&&ips[i].time<cnt){minip=i;}}int resip=0;if(unsenip){resip=unsenip;}if(minip){resip=minip;}if(!resip){ips[resip]=1;//mes[++cnt].ip=resip;//ip是一个结构体if(!ddl){mes[cnt].ddl=cnt+Tdef;}else{//如果请求的时间没有过长或者过短,都可以设置为读入的ddlif(cnt+Tmin<=ddl&&cnt+Tmax>=ddl){mes[cnt].ddl=ddl;}else{mes[cnt].ddl=0;}}//到此处处理完DIS报文再发送REQ报文的任务//对ip分成单独一个结构题的感觉愈加明显//mes应该不用分配结构体,只需要对其进行处理,然后分配ip//修改ip状态mes[cnt].send=send;mes[cnt].rec=H;mes[cnt].type=type;mes[cnt].start=start;ips[ip]=1;//向发送主机发送报文的结果就是在控制台打印出东西//归根结底还是ip是否能分配成功printf("%s %s %s %d %d\n",H,send,"OFR",start,ddl);cnt++;return true;}}return false;
}signed main()
{cin>>N>>Tdef>>Tmax>>Tmin;cin>>H;int n;cin>>n;for(int i=1;i<=n;i++){string s;getline(cin,s);stringstream ss;ss<<s;ss>>start,ss>>send,ss>>rec;ss>>type,ss>>ip,ss>>ddl;if(send!=H&&send!="*"){if(type!="REQ") continue;}else if(type!="REQ"&&type!="DIS"){continue;}else if(send==H){if(type=="DIS")continue;//在想一个怎么样能够很好判断是否占用的数据结构}else if(send=="*"){if(type!="DIS")continue;}if(type=="DIS"){if(!checkDISmes()) continue;}if(type=="REQ"){if(!checkREQmes()) continue;}T++;}return 0;
}

最终ac版

#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
#include<vector> using namespace std;
const int MAXNAME=20,MAXN=1e4+10;int N,Tdef,Tmax,Tmin;
string H;int tc,ip,te;
string send,rec,type;int T;
int cnt=1;int m;struct IP
{int state; //0:为分配; 1:待分配; 2:占用; 3:过期 ;string user;int t;}ips[MAXN];/*
在到达该过期时刻时,若该地址的状态是待分配,
则该地址的状态会自动变为未分配,且占用者清空,
过期时刻清零;否则该地址的状态会由占用自动变为过期,
且过期时刻清零。处于未分配和过期状态的 IP 地址过期时刻为零,
即没有过期时刻。
*/void update()
{for(int i=1;i<=N;i++){if(ips[i].t&&ips[i].t<=tc){if(ips[i].state==1){ips[i].state=0;ips[i].user="";ips[i].t=0;}else{ips[i].state=3;ips[i].t=0;}}}
}//<发送主机> <接收主机> <报文类型> <IP 地址> <过期时刻>int get_ip_by_user(string s)
{for(int i=1;i<=N;i++){if(ips[i].user==s){return i;}}return 0;
}int get_ip_by_state(int state)
{for(int i=1;i<=N;i++){if(ips[i].state==state) return i;}return 0;
}void set1()
{for(int i=1;i<=N;i++){if(ips[i].user==send&&ips[i].state==1){ips[i].state=0;ips[i].user="";ips[i].t=0;}}
}signed main()
{cin>>N>>Tdef>>Tmax>>Tmin;cin>>H;cin>>m;while(m--){cin>>tc>>send>>rec>>type>>ip>>te;if(rec!=H&&rec!="*"){if(type!="REQ") continue;}if(type!="REQ"&&type!="DIS"){continue;}if((rec==H&&type=="DIS")||(rec=="*"&&type!="DIS")){continue;}//每读入一个报文,就有一个新的时刻,所以要更新//把过了时间的给去掉update();if(type=="DIS"){int k=get_ip_by_user(send);if(!k) k=get_ip_by_state(0);if(!k) k=get_ip_by_state(3);if(!k) continue;ips[k].state=1;ips[k].user=send;if(!te) ips[k].t=tc+Tdef;else{int delt=te-tc;delt=min(Tmax,delt);delt=max(Tmin,delt);ips[k].t=tc+delt;}cout<<H<<' '<<send<<' '<<"OFR"<<' '<<k<<' '<<ips[k].t<<endl;//printf("%s %s %s %d %d\n",send,rec,"OFR",k,ips[k].t);}else{//int k=get_ip_by_user(H);if(rec!=H){set1();continue;}if(!(ip>=1&&ip<=N&&ips[ip].user==send)){cout<<H<<' '<<send<<' '<<"NAK"<<' '<<ip<<' '<<0<<endl;//printf("%s %s %s %d %d\n",send,rec,"Nak",k,ips[k].t);//continue;}else{ips[ip].state=2;if(!te) ips[ip].t=tc+Tdef;else{int delt=te-tc;delt=min(Tmax,delt);delt=max(Tmin,delt);ips[ip].t=tc+delt;}cout<<H<<' '<<send<<' '<<"ACK"<<' '<<ip<<' '<<ips[ip].t<<endl;//printf("%s %s %s %d %d\n",send,rec,"Ack",k,ips[k].t);}}}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/52113.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

授权cleanmymac访问全部磁盘 Mac授权访问权限 cleanmymac缺少权限

CleanMyMac是Mac系统下的一款专业的苹果电脑清理软件&#xff0c;同时也是一款优秀的电脑系统管理软件。它能有效清理系统垃圾&#xff0c;快速释放磁盘内存&#xff0c;缓解卡顿现象&#xff0c;保障系统顺畅地运行。 全磁盘访问权限&#xff0c;就好比机场内进行的安全检查。…

【AD9361 数字基带】多片基带内FPGA补偿 I/Q Rotation

I/Q 旋转 Rotation 在许多多通道射频系统中&#xff0c;如 AD-FMCOMMS5&#xff0c;甚至在 AD-FMCOMMS2、AD-FMCOMMS3 上&#xff0c;都需要测量或校正两个复数 &#xff08;I/Q&#xff09; RF 信号之间的相位差。 从纯粹的数学描述来看&#xff0c;单个正弦波没有相位&…

Godot《躲避小兵》实战之游戏开始界面制作

我们的游戏还需要用户可操作的界面&#xff0c;比如开始游戏&#xff0c;退出以及显示分数等UI界面。 创建新场景&#xff0c;点击“其他节点”按钮&#xff0c;然后添加一个 CanvasLayer 节点并命名为 HUD。“HUD”是“heads-up display”&#xff08;游戏信息显示&#xff0…

计算机网络——运输层(进程之间的通信、运输层端口,UDP与TCP、TCP详解)

运输层协议概述 进程之间的通信 运输层向它上面的应用层提供通信服务。 当网络边缘部分的两台主机使用网络核心部分的功能进行端到端的通信时&#xff0c;都要使用协议栈中的运输层&#xff1b;而网络核心部分中的路由器在转发分组时只用到下三层的功能。 Q1&#xff1a;我们…

最全Java集合分片处理!!! Java 中 List 分片的 7种方法

文章目录 Java 中 List 分片的 7种方法业务需求背景实现方法方法一&#xff1a;最基本的 for 循环实现方法二&#xff1a;利用 List 的 subList() 方法方法三&#xff1a;stream 流操作 filter 方法过滤方法四&#xff1a;使用 Google Guava 的 Lists.partition 方法方法五&…

【计算机三级-数据库技术】操作题大题(第六套)

第六套操作题 第46题 假定要建立一个学校科研项目管理的信息系统&#xff0c;需要管理如下信息&#xff1a; 教师&#xff1a;教师编号、教师姓名&#xff1b; 项目&#xff1a;项目编号、项目名称、资助额&#xff1a; 学生&#xff1a;学生编号、学生姓名、学位&#xff0c…

跟李沐学AI:转置卷积

定义 卷积不会增大输入的高宽&#xff0c;通常卷积层后高宽不变或减半。转置卷积则可以用来增大输入的宽高。 转置卷积是一种卷积&#xff0c;它将输入和核进行了重新排列&#xff0c;通常用作上采用。 如果卷积将输入从变为&#xff0c;同样超参数的情况下&#xff0c;转置…

集团数字化转型方案(十二)

集团数字化转型方案致力于通过构建一个集成化的数字平台&#xff0c;全面应用大数据分析、人工智能、云计算和物联网等前沿技术&#xff0c;推动业务流程、管理模式和决策机制的全面升级。该方案将从业务流程的数字化改造开始&#xff0c;优化资源配置&#xff0c;提升运营效率…

yolov8 出现loss 为nan

原因&#xff1a; 混合精度训练是一种通过同时使用 FP16 和 FP32 精度来加速深度学习训练的技术。它可以在不损失模型性能的情况下,显著减少训练时间和内存使用。下面是关于混合精度训练的一些解释: 1. 原理 混合精度训练利用了 FP16 (16位浮点)和 FP32 (32位浮点)的不同特性。…

每日一题——贪心算法

860. 柠檬水找零 - 力扣&#xff08;LeetCode&#xff09; 这道题目乍一看可能没有什么头绪&#xff0c;但是当你仔细想想就会明白一个道理&#xff0c;那就是&#xff0c;《论电子支付的重要性》哈哈哈哈&#xff0c;言归正传&#xff0c;其实很简单无非就是找钱&#xff0c;…

Alembic:python中数据库迁移的瑞士军刀

Alembic 简介 Alembic 是由 SQLAlchemy 的创始人 Mike Bayer 设计的一个数据库迁移工具。它不仅支持自动迁移脚本生成&#xff0c;还允许开发者手动编辑迁移脚本来满足特定的需求。Alembic 通过提供一个环境来跟踪数据库模式的变更历史&#xff0c;确保数据库的版本与应用代码…

linux内核 时间同步机理分析笔记

1 内核时间管理的相关组件 1.1 clocksource 和 clock_event_device 1.1.1 简介 外部时钟设备的主要作用是提供精确的计时功能和定期产生中断的功能&#xff0c;内部把提供精确计时的功能抽象为clocksource对象&#xff0c;把定期产生中断的功能抽象为clock_event_device对象…

《黑神话:悟空》全网互动量超1.8亿,百万天命人重走西游

四年磨一剑&#xff0c;一剑破长空。 8月20日10点&#xff0c;《黑神话&#xff1a;悟空》正式开服&#xff0c;同时轰动了国内外游戏圈子&#xff0c;冲顶国内各大社媒平台&#xff0c;一天包揽120个热搜。上线之后&#xff0c;《黑神话&#xff1a;悟空》火速登顶Steam热销游…

克服编程学习中的挫折感:从心态到策略的全方位指南

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《热点时事》 期待您的关注 目录 引言 一、心态调整&#xff1a;积极乐观&#xff0c;合理期望 二、学习方法&#xff1a;有效策…

一起学Java(3)-Java项目构建工具Gradle和Maven场景定位和优缺点对比

在第一步创建的项目&#xff08;java-all-in-one&#xff09;项目里&#xff0c;我们提到了使用Gradle作为项目构建工具。看到这里&#xff0c;不知道你是否有疑惑&#xff0c;什么是项目构建工具。Java项目常用构建工具有哪些&#xff1f;都有什么特点&#xff1f; 带着疑惑&…

【教程】Ubuntu给pycharm添加侧边栏快捷方式

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 以下教程不仅限于pycharm&#xff0c;其他软件也是一样操作 1、进入到pycharm的目录&#xff0c;先通过命令行打开pycharm&#xff1a; ./bin/pycharm…

[Leetcode 61][Medium]-旋转链表

目录 一、题目描述 二、整体思路 三、代码 一、题目描述 原题链接 二、整体思路 首先发现这样的规律&#xff1a;当k大于等于链表中节点总数n时&#xff0c;会发现此时旋转后的链表和kk%n时的旋转后的链表一样。同时对于特殊情况n0和n1时&#xff0c;无论k的值为多少都可以…

论文翻译:Universal and Transferable Adversarial Attacks on Aligned Language Models

Universal and Transferable Adversarial Attacks on Aligned Language Models https://arxiv.org/pdf/2307.15043v2 通用且可转移的对抗性攻击对齐语言模型 文章目录 通用且可转移的对抗性攻击对齐语言模型摘要1 引言2 一个针对LLMs的通用攻击2.1 产生肯定回应2.2 贪婪坐标梯…

Prometheus Alertmanager告警之邮件、钉钉群、企业微信群机器人报警

文章目录 一、部署alertmanager相关组件1.alertmanager-config2.alertmanager-message-tmpl3.alertmanager 二、调试邮件告警三、钉钉群/企业微信群 报警3.1添加钉钉群机器人3.2添加企业微信群机器人3.3部署alertmanager-webhook-adaptermessage-tmplalertmanager-webhook-adap…

【PHP入门教程】PHPStudy环境搭建+HelloWorld运行

文章目录 PHP 的历史PHP 的用途PHP 的特点和优势PHP 环境搭建环境准备安装window 安装CentOS / Ubuntu / Debian 安装 第一个Hello World使用Apache服务运行命令行运行代码 PHP 的历史 PHP&#xff08;Hypertext Preprocessor&#xff09;超文本预处理器是一种开源的通用脚本语…