通过配置获取客户端所属服务器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    }
posted @ 2007-10-20 10:09  随机  阅读(1310)  评论(1编辑  收藏  举报