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.rhkb.cn/news/406896.html

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

相关文章

Excel的使用总结2

目录 1、数据的分割 2、根据某个条件筛选出来的数据&#xff0c;想要直接复制&#xff0c;并粘贴到与筛选数据对应的位置 3、几个单元格中的内容连接 4、如果一个表格数据很多&#xff0c;但是你想查看一列中是否有数据&#xff0c;如何查看 1、数据的分割 首先&#xff0c…

SwapPrompt(论文解读): Test-Time Prompt Adaptation for Vision-Language Models

2023(Neural IPS) 摘要 测试自适应 &#xff08;TTA&#xff09; 是无监督域自适应&#xff08;UDA&#xff09;中一种特殊且实用的设置&#xff0c;它允许源域中的预训练模型去适应另一个目标域中的未标记测试数据。为了避免计算密集型的骨干网络微调过程&#xff0c;因此利…

JavaScript(31)——内置构造函数

构造函数 构造函数是一种特殊的函数&#xff0c;主要用于快速初始化对象 用大写字母开头只能由new操作符来执行 function Stu(name, age) {this.name namethis.age age}const xiaom new Stu(小明, 18)const xiaoh new Stu(小红, 19)console.log(xiaom);console.log(xiaoh…

使用 Visual Studio 编辑器作为 DailyNotes 的 markdown 编辑器

DailyNotes 是我使用过的最优秀的日常笔记管理工具&#xff0c;为它配置一个好的 markdown 编辑器&#xff0c;可以大幅提升效率。 除了使用 Typora 作为 markdown 编辑器&#xff0c;Visual Studio Code 也是一个非常不错的选择&#xff0c;令人惊喜的是&#xff0c;它也支持…

ts枚举类型校验,提示枚举信息

ts 类型验证&#xff0c;提示枚举信息 const eventTypeList [MOUSE_MOVE, // 鼠标移动LEFT_CLICK // 左键单击// MOUSE_OUT, ] as consttype EventTypeList typeof eventTypeList[number]

Pod基础使用

POD基本操作 1.Pod生命周期 在Kubernetes中&#xff0c;Pod的生命周期经历了几个重要的阶段。下面是Pod生命周期的详细介绍&#xff1a; Pending&#xff08;待处理&#xff09;: 调度: Pod被创建后&#xff0c;首先进入“Pending”状态。此时&#xff0c;Kubernetes的调度器…

uniapp中 使用 VUE3 组合式API 怎么接收上一个页面传递的参数

项目是uniapp &#xff0c;使用了vue3 vite // 使用的组合式API 的 语法糖 <script setup> // 无法使用 onLoad <script> 使用不了下面方法获得上一个页面参数传递 onLoad(options){ } 解决方案1&#xff08;亲测Ok&#xff09;&#xff1a;消息通知与监听…

虹软科技25届校招笔试算法 A卷

目录 1. 第一题2. 第二题3. 论述题 ⏰ 时间&#xff1a;2024/08/18 &#x1f504; 输入输出&#xff1a;ACM格式 ⏳ 时长&#xff1a;2h 本试卷分为不定项选择&#xff0c;编程题&#xff0c;必做论述题和选做论述题&#xff0c;这里只展示编程题和必做论述题&#xff0c;一共三…

Win11搭建Angular开发环境

作为一名后端程序员&#xff0c;无论当前的工作是否需要&#xff0c;会一点点前端无疑对自己是有帮助的。今天就来介绍一下如何搭建Angular的开发环境。我也是摸着石头过河&#xff0c;所以很多东西也不熟悉&#xff0c;先按照Angular官网的介绍来配置吧。 这个是Angular最新版…

mmyolo训练模型报错:ValueError: Key img_path is not in available keys解决办法

使用mmyolo训练模型 的时候报错&#xff1a;ValueError: Key img_path is not in available keys. Traceback (most recent call last): File “tools/train.py”, line 123, in main() File “tools/train.py”, line 119, in main runner.train() File “/root/anaconda3/en…

erlang学习:erlang学习:书上案例22.6练习题3

初步实现了书上案例第二&#xff0c;三问的要求&#xff0c;对输出结果有部分偏差&#xff0c;没有实现对已完成任务状态的记录&#xff0c;因此已完成任务输出无论如何都是0&#xff0c;明天会在record中加一个字段进行已完成任务状态的记录 (2) 添加一个名为job_centre:stati…

服务器备份

服务器备份 一、方案 FreeFileSync freeSSHd Windows任务计划程序 FreeFileSync&#xff1a;设置文件备份方案&#xff08;双向同步、镜像同步、更新同步、自定义同步&#xff09;&#xff0c;适用于本地的文件同步之外&#xff0c;还支持 Google Driver、SFTP 和 FTP 三种…

泛微基于华为仓颉编程语言开发公文交换系统 推动办公软件全面国产化

2024年6月21日下午&#xff0c;华为终端BG软件部总裁龚体先生在华为开发者大会主题演讲《鸿蒙原生应用&#xff0c;全新出发&#xff01;》中向全球开发者介绍了华为自研仓颉编程语言&#xff0c;并发布了HarmonyOS NEXT仓颉语言开发者预览版。这是华为首次公开发布仓颉编程语言…

Windows—UDP编程

Client骨架&#xff1a; #include <iostream> #include <WinSock2.h> #pragma comment(lib,"ws2_32.lib")int main() {//启动Winsock DLLWORD wVersionRequested MAKEWORD(2, 2);WSADATA lpWSAData;WSAStartup(wVersionRequested, &lpWSAData);//…

实现AOP机制 + Spring总结

文章目录 1.目录2.SmartAnimal.java 接口&#xff08;JDK代理必须有接口&#xff09;3.SmartDog.java4.SmartAnimalAspect.java5.SunSpringApplicationContext.java1.在Bean的后置处理器之后使用动态代理2.完整代码 6.测试1.AppMain.java 调用被代理的类的方法2.结果 7.Spring底…

Unity抖音直播玩法开发流程

前言 近两年直播玩法逐渐新兴起来了&#xff0c;也出现不少质量还不错的作品&#xff0c;比如下列《红蓝对决》《三国全战》等。近期我们也做了一款直播玩法&#xff0c;就此记录下开发流程。 1&#xff0c;申请应用 进入抖音开发者平台&#xff0c;在首页入驻平台。 如果是…

Vue3+Vite 解决“找不到模块“@/components/xxx.vue”或其相应的类型声明 ts(2307)”

1. 安装插件 pnpm i types/node -D2. 修改vite.config.ts文件 import path from path;resolve: {alias: {"": path.resolve(__dirname,"./src"),},},3. 修改tsconfig.app.json文件 别人教的都是修改tsconfig.json文件&#xff0c;但是我发现可能是因为版…

写论文找不到灵感?ChatGPT能提供的一些帮助

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 在学术写作过程中&#xff0c;许多读者常常会面临一个问题——找不到灵感。面对庞大的文献和复杂的研究方向&#xff0c;往往感到无从下手。随着人工智能技术的发展&#xff0c;像ChatG…

redis面试(十九)读写锁ReadLock

读写锁ReadLock 简单来说就是互斥锁和非互斥锁。多个客户端可以同事加的锁叫读锁&#xff0c;只能有一个客户端加的锁叫写锁。这个理论应该是从数据库中来的&#xff0c;放在这里也是同样的解释。 多个客户端同时加读锁&#xff0c;是不会互斥的&#xff0c;多个客户端可以同…

“肯将玉钳作双戟,一舞天下定乾坤。”记唐铎《墨龙图》之中的笔墨画意

唐铎&#xff0c;1957 年生于北京&#xff0c;国家一级美术师&#xff0c;曾先后师从于刘文西、黄申发老师&#xff0c;原名唐京鸣&#xff0c;京城人士&#xff0c;取其名&#xff0c;不鸣则已&#xff0c;一鸣惊人之意&#xff0c;学画三十余年&#xff0c;专注于齐派虾蟹&am…