这两天要实现一个功能:根据不同地区的客户端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 }
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 }