• 通过配置获取客户端所属服务器IP或服务器名


        这两天要实现一个功能:根据不同地区的客户端IP来获取相对应的服务器IP,以提高上传和下载文件的速度。

        配置文件内容:
            

            <appSettings>
              <!--  配置服务器包含的客户端IP段
      
             格式:
                服务器IP(或服务器名)|[起始IP-终止IP;][IP地址段;][准确IP地址;]
        
             例:
                10.16.0.1|10.16.0.5;
                10.16.0.1|10.16.*.*;10.15.*.*;
                10.16.0.1|10.13.0.1-10.13.1.1;10.16.*.*;     
              -->
              <add key="ServerIP1" value="10.16.0.1|11.12.12.1-11.12.13.200;10.16.*.*;">
              </add>
              <add key="ServerIP2" value="20.22.0.1|20.22.*.*;">
              </add>
              <add key="ServerName" value="1.1.0.1|1.1.0.5;">
              </add>

         </appSettings>



        功能代码如下:

     1public class ServerIP
     2    {
     3        public ServerIP()
     4        {
     5            //
     6            // TODO: Add constructor logic here
     7            //
     8        }

     9
    10        private string GetIPSegment(string IP,int SegmentPosition)
    11        {
    12            return IP.Split('.')[SegmentPosition-1];
    13        }

    14
    15        private string[] GetIPAreaList(string ConfigIPString)
    16        {
    17            return ConfigIPString.Split('|')[1].Split(';');
    18        }

    19
    20        private string GetServerIP(string ConfigIPString)
    21        {
    22            return ConfigIPString.Split('|')[0];
    23        }

    24
    25        private string ConvertIPString(string IP)
    26        {
    27            string IPString="";
    28            for(int i=1;i<=4;i++)
    29            {
    30                IPString+=GetRepeatString("0",3-GetIPSegment(IP,i).Length)+GetIPSegment(IP,i)+".";
    31            }

    32            return IPString.Substring(0,IPString.Length-1);
    33        }

    34
    35        private string GetRepeatString(string StringValue,int RepeatCount)
    36        {
    37            string RepeatStrng="";
    38            for(int i=0;i<RepeatCount;i++)
    39            {
    40                RepeatStrng+=StringValue;
    41            }

    42            return RepeatStrng;
    43        }

    44
    45        public string GetLocalServerIP(string LocalHostIP)
    46        {
    47            string[] IPAreaList;
    48            for(int i=0;i<ConfigurationSettings.AppSettings.Count;i++)
    49            {
    50                IPAreaList=GetIPAreaList(ConfigurationSettings.AppSettings[i]);
    51
    52                for(int j=0;j<IPAreaList.Length;j++)
    53                {
    54                    if(IPAreaList[j]!=null && IPAreaList[j].Trim().Length>0)
    55                    {
    56                        if(IPAreaList[j].IndexOf("-")!=-1)
    57                        {
    58                            string StartIP=IPAreaList[j].Split('-')[0];
    59                            string EndIP=IPAreaList[j].Split('-')[1];
    60                        
    61                            if(Convert.ToInt64(ConvertIPString(LocalHostIP).Replace(".",""))>=Convert.ToInt64(ConvertIPString(StartIP).Replace(".","")) 
    62                                && Convert.ToInt64(ConvertIPString(LocalHostIP).Replace(".",""))<=Convert.ToInt64(ConvertIPString(EndIP).Replace(".","")))
    63                            {
    64                                return GetServerIP(ConfigurationSettings.AppSettings[i]);
    65                            }

    66                        }

    67                        else
    68                        {
    69                            string Pattern=("^"+GetIPSegment(ConvertIPString(IPAreaList[j]),1)+"\\."+
    70                                GetIPSegment(ConvertIPString(IPAreaList[j]),2)+"\\."+
    71                                GetIPSegment(ConvertIPString(IPAreaList[j]),3)+"\\."+
    72                                GetIPSegment(ConvertIPString(IPAreaList[j]),4)+"$").Replace("00*","[0-2][0-9][0-9]");
    73                            MatchCollection Matches=Regex.Matches(ConvertIPString(LocalHostIP),Pattern);
    74                            if(Matches.Count>0)
    75                            {
    76                                return GetServerIP(ConfigurationSettings.AppSettings[i]);
    77                            }

    78                        }

    79                    }

    80                }

    81            }

    82            return "No Found!";
    83        }

    84        
    85    }
  • 相关阅读:
    《笨办法学Python》 第31课手记
    《笨办法学Python》 第30课手记
    《笨办法学Python》 第29课手记
    《笨办法学Python》 第28课手记
    《笨办法学Python》 第27课手记
    《笨办法学Python》 第26课手记
    《笨办法学Python》 第25课手记
    《笨办法学Python》 第23课手记
    杭电2019
    杭电2018----母牛的故事
  • 原文地址:https://www.cnblogs.com/Random/p/931225.html
Copyright © 2020-2023  润新知