如何从服务端获取客户端的IP和主机
首先,建立一条WebService,其中包含了获取客户端IP的方法,通过Request的ServerVariables方法获取web服务器变量的集合,HTTP_VIA 和 HTTP_X_FORWARDED_FOR 这两个 ServerVariables表示使用了代理,
/// <summary>
/// 获得ClientIP
/// </summary>
/// <param name="strClientName">客户端机器名</param>
/// <returns></returns>
[WebMethod]
public string GetClientIP(string strClientName)
{
// 或者客户端名 和客户端IP
string strYourName = strClientName;
string strIP = string.Empty;
if (HttpContext.Current.Request.ServerVariables["HTTP_VIA"] != null)
{
strIP = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();
}
else
{
strIP = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"].ToString();
}
return strIP;
}
2.当获取了IP后,需要对IP进行保存,通常我们会将客户端名和客户端IP写入客户端ArrayList中,然后将对应的名称与IP保存起来
/// <summary>
/// 保存ClientIP
/// </summary>
/// <param name="strClientName"></param>
/// <param name="strIP"></param>
/// <param name="strConnectionType"></param>
/// <returns></returns>
[WebMethod]
public void SaveClientIP(string strClientName, string strIP, string strConnectionType)
{
// 或者客户端名 和客户端IP
string strYourName = strClientName;
// 客户端ArrayList中有值的场合
if (alClient != null && alClient.Count != 0)
{
// 将客户端名和客户端IP存入 客户端ArrayList中
for (int i = 0; i < alClient.Count; i++)
{
string[] strClient = new string[3];
strClient = (string[])alClient[i];
// 判断机器名存在并且IP不同的场合把当前的IP 存入 相应的机器名
if (strClient[0] == strClientName && strClient[1] != strIP)
{
strClient[1] = strIP;
strClient[2] = strConnectionType;
alClient.RemoveAt(i);
alClient.Add(strClient);
return;
}
else if (strClient[0] == strClientName && strClient[1] == strIP)
{
return;
}
}
}
// 如果得到的机器名 在客户端ArrayList中不存在的话添加到客户端ArrayList中
string[] strClientTemp = new string[3];
strClientTemp[0] = strClientName; // 机器名
strClientTemp[1] = strIP; // 机器IP
strClientTemp[2] = strConnectionType; //
alClient.Add(strClientTemp);
return ;
}
3.服务端调用,通过循环将保存的数据读写出来
for (int i = 0; i < Service1.alClient.Count; i++)
{
//string[] strClinet = new string[2];
//strClinet = (string[])Service1.alClient[i];
//strClientShow += "客户端机器名:" + strClinet[0] + " | 客户端ip:" + strClinet[1] + "<br />";
string strIP = string.Empty;
string strWebIPURL = string.Empty;
string strHTML = string.Empty;
string strKey = string.Empty;
string[] strClinet = new string[3];
strClinet = (string[])Service1.alClient[i];
strClientShow += "客户端机器名:" + strClinet[0] + " | 客户端ip:" + strClinet[1] + " | " + strClinet[2] + "<br />";
}