通过配置获取客户端所属服务器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>
功能代码如下:
1
public 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
}
public class ServerIP2
{3
public ServerIP()4
{5
//6
// TODO: Add constructor logic here7
//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
else68
{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
}

浙公网安备 33010602011771号