服务端得到客户端的IP和主机

   如何从服务端获取客户端的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 />";

                    }

转载于:https://www.cnblogs.com/gaowenbin/articles/1867427.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值