全都是在数据库里面保存的!!!!(不是问怎么获取IP哦!!IP段和服务器内容全是手工添加的!)一个IP分配管理的程序系统~  有2个表,一个是交换机表,一个服务器表比如说添加交换机的时候分配给服务器192.168.0.1-192.168.0.150 IP段然后再 添加服务器1 的IP段为 192.168.0.21-192.168.0.80问题来了! (要求每个服务器分配的的IP段不能有相同的IP!!)就是现在交换机的IP剩下了 1-20和81-150比如:
那么到添加 服务器2的时候怎么判断 输入 33 - 99 的时候 怎么判断输入出错???
寻求个思路和解决的方法~~~

解决方案 »

  1.   

    改数据库结构,用uint32而不是字符串来表示ip地址的起止.
    比如 192.168.0.1 存储为 3194548201 然后用大小来比较.
      

  2.   

    手动输入的时候转换一下就可以了.  其实192.168.0.1 就是 3194548201 ,只是因为这样一个大数字不容易记忆于是才写成4段的.  你理解为这是个 256进制的4位数字, 也就是2进制的32位无符号了.刚好是一个uint可以存下. 
      

  3.   

    不是的` 我是这样存储的 
      
    id  name       ip       min  max
    1  服务器1   192.168.0   21   80
      

  4.   

    33-99循环i=33到99
    判断 select id from a where min>=i and max<=i ,如果有记录就分配了
      

  5.   

    min<=i and max >=i 
      

  6.   

    补充楼上的,转uint后,然后比较,假设有一个ip段a,b
    现在需要判断另外一个ip段a1,b1是否有重复,只需要判断
    a<=a1<=b || a<=b1<=b || a1<=a<=b1 || a1<=b<=b2,成立一个就有重复。
      

  7.   

    根据你表的设计,服务器分配的IP都是连续一段IP!那么不管那个服务器过来取走IP段!你只要判断,最小IP 和 最大IP,都不在当前记录的的 区间里面!
    如:服务器1     20~80
    服务器2        100~120你当前想给
    服务器3分配IP,最小,最大IP都不在 前两条记录的区间,并最大IP小于150
      

  8.   

    都不知道你怎么想的!!!只是一句SQL语句,,你那来的数组???id  name      ip      min  max 
    1  服务器1  192.168.0  21  80i:你想分配的最小值,K:你想分配的最大值
    select id from a where  (min<=i and max >=i) or (min<=k and max >=k)如果有值,说明 你想分配的IP段,和当前有冲突(部分IP段已经被分配)