通过配置获取客户端所属服务器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
}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器