手写DHCP服务器(实现简单的DHCP服务器)

本文介绍了一个简易DHCP服务器的实现,详细阐述了如何根据MAC地址分配和释放IP地址。服务器遵循特定的分配策略:重复申请时返回已有IP,再申请时优先分配历史IP,按升序分配未分配或已释放的IP,无法分配时返回NA。同时,文章还提及了样例输入输出和代码实现情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

DHCP服务器的功能是为每一个MAC地址分配唯一的IP地址。现假设:分配的IP地址范围从 192.168.0.0 到 192.168.0.255 总共256个可用地址(以点分十进制表示)。请实现一个简易的DHCP服务器,功能如下:

  • 分配Request:根据输入的MAC地址分配IP地址池中的IP地址:
    1.如果对应的IP已分配并未释放,则为重复申请,直接返回对应已分配的IP地址。
    2.如果一个MAC地址已申请过并已释放,即:当前未分配IP地址,则为再申请,优先分配最近一次曾经为其分配过的IP地址,请返回此地址。
    3.按升序分配从未被分配过的IP地址;如果地址池中地址都已被分配过,则按升序分配已释放出来的IP地址;若可分配成功,则返回此IP地址。
    4.若仍然无法分配成功,则返回NA。

  • 释放Release:根据输入的MAC地址释放已分配的IP地址:
    1.如果申请释放的对应的IP地址已分配,则释放此IP地址;
    2.如果申请释放的对应的IP地址不存在,则不作任何事情;

解答要求
时间限制: 1000ms, 内存限制: 64MB

输入输出示例

输入
首行为整数n, 表示其后输入的命令行数,范围[1,2000]。
之后每行为一条分配命令,格式为:命令=MAC地址
命令只有两种:REQUEST 和 RELEASE,分别表示分配和释放;
MAC地址为:12个大写英文字母或数字,如:AABBCCDDEEF1。

输出
1.REQUEST命令,输出分配结果(IP地址或NA),均为字符串形式。
注意:IP地址的各区段不设置前置 0
2.RELEASE命令,不输出任何内容。

样例
输入样例1

2
REQUEST=AABBCCDDEEF1
RELEASE=AABBCCDDEEF1输出样例1
192.168.0.0

输入样例2

6
REQUEST=AABBCCDDEEF1
REQUEST=F2FBBCCDDEEF
RELEASE=AABBCCDDEEF1
RELEASE=F2FBBCCDDEEF
REQUEST=333333333333
REQUEST=F2FBBCCDDEEF输出样例2
192.168.0.0
192.168.0.1
192.168.0.2
192.168.0.1

提示
REQUEST=AABBCCDDEEF1: 按升序分配从未使用过的IP,为192.168.0.0
REQUEST=F2FBBCCDDEEF : 按升序分配从未使用过的IP,为192.168.0.1
RELEASE=AABBCCDDEEF1 : 释放IP 192.168.0.0。
RELEASE=F2FBBCCDDEEF : 释放IP 192.168.0.1。
REQUEST=333333333333 : 按升序分配从未使用过的IP,为192.168.0.2
REQUEST=F2FBBCCDDEEF : 该MAC地址再申请,优先分配最近一次曾经为其分配过的IP,为192.168.0.1

代码1(84%)

package com.atguigu.huawei;
import java.nio.charset.StandardCharsets;
import java.util.*;

public class HuaWeiTest {
   
    static HashMap<String,String> curMacAddress = new HashMap<>();
    //目前已经分配的
    static HashMap<String,String> oldMacAddress = new HashMap<>();
    //已经申请过,并已经释放
    static List<String> allAddress = new ArrayList<>();
    //所有的可用地址
    static int count = 0;
    //可用地址计数器
    static Queue<Integer> realseAddress = new PriorityQueue<>(256,
            (i1, i2) -> i1 -
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

haikuotiankongdong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值