Foxtable(狐表)用户栏目专家坐堂 → [分享]外网IP地址和城市的获取、与IP地址无关性全自动登录和全自动升级


  共有9634人关注过本帖树形打印复制链接

主题:[分享]外网IP地址和城市的获取、与IP地址无关性全自动登录和全自动升级

帅哥哟,离线,有人找我吗?
shenyl0211
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:977 积分:6835 威望:0 精华:0 注册:2012/4/2 21:49:00
[分享]外网IP地址和城市的获取、与IP地址无关性全自动登录和全自动升级  发帖心情 Post By:2013/7/29 21:37:00 [显示全部帖子]

如题,是狐友关注比较多的问题。

1、内网IP地址的获取在帮助中已有详述,但外网IP地址和城市的获取在帮助中只字不提,而在用户登录管理中获取IP地址是必需的,因为用户的初始密码都是“888”,通过记录IP地址和城市,开发者或管理者通过查询就可以协助证实是那台电脑、在什么时候、什么地点修改了用户的初始密码。我在lin_hailun的代码基础上调试后予以完善,比较适合实际。
2、与IP地址无关性的全自动登录有很多狐友提问,但论坛上都是答非所问,帮助中仅用扩展属性让用户登录时选择IP地址,这种做法显然是不可取的,我们编软件的必须对客户负责,尽量减少他们的额外操作。因此,我提供一种成熟的方法供大家参考,代码非常简单。

3、与IP地址无关性的全自动升级的代码我早已发在论坛上,见下文。

不妥之处,敬请斧正。若有更好的代码,敬请交流。谢谢!

1、外网IP地址和城市的获取

自定义用户登录窗口中的登录按钮的部分代码,用于获取登录用户的机器名、IP地址和城市,可记录在登录管理表中备查

Dim i As Integer

Dim HostName As String=System.Net.Dns.GetHostName '获得本机的机器名

Dim IPAdress As System.Net.IPAddress=System.Net.Dns.GetHostByName(HostName).AddressList.GetValue(0) '获得本机的IP地址

Dim ip99 As String=IPAdress.Tostring

If ip99.contains(mid(IP1,1,5))=0 Then '如果不是通过公司局域网的IP1地址上网(即通过外网上网,或通过公司局域网内的路由器上网)

    '由于不知道飞的代码如何转化为字符串,所以参考lin_hailun的代码,均在http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=24372&skin=0

    'lin_hailun采用的http://city.ip138.com/city.asp提供的城市是错误的,至少我单位的解释是错误的,所以采用飞的http://ip.qq.com/,如果不需要获取城市代码,采用lin_hailun的代码更加简洁。

    Dim web As New System.Windows.Forms.WebBrowser()

    web.Navigate("http://ip.qq.com/")

    Do Until web.ReadyState = 4

        Application.DoEvents

    Loop

    Dim elems As System.Windows.Forms.HtmlElementCollection

    Elems = web.Document.GetElementsByTagName("Body")   '根据标签得到数据集合

    Dim data As String = elems(0).InnerText

    Dim start As Integer = data.IndexOf("IP") + 4

    Dim ip91 As String =trim(data.SubString(start,15)) 'IP地址,最多15个字符

    Dim i As Integer

    Dim j As String

    For i =8 To 15 'IP地址至少7

        j =mid(ip91,i,1)

        If j=chr(10) Then

            ip91=mid(ip91,1,i-1) '最终的IP地址

            Exit For

        End If

    Next

    start = data.IndexOf("IP所在地为") + 9

    Dim ip92 As String=trim(data.SubString(start,15)) 'IP地址对应的城市,最多15个字符

    For i  =6 To 15 '城市最少5个字符

        j =mid(ip92,i,1)

        If j=" " Then

            ip92=mid(ip92,1,i-1) '最终的城市,忽略后面的运营商

            Exit For

        End If

    Next

    ip91=ip91 & "|" & ip92 '合并

End If


2、与IP地址无关性的全自动登录

在BeforeConnectOuterDataSource事件中设置如下代码,不管外网内网都可自动登录。

下列代码中未定义的变量,见第3部分介绍的全局代码。

'通用-根据是否开发状态以及内网和外网登录时服务器地址IP的不同,选择不同的连接字符串

Dim i As Integer=1 '刚开始开发时用内部数据源,取i=0;基本成熟后测试或交付使用时用外部数据源,取i=1

If i=1 Or e.ProjectFile<> dpath & pfile Then '这是开发时项目文件名

    Dim a As Boolean

    For i =1 To 5 'ping5次

        a=Network.Ping(IP1,500) 'ping内网,每次500毫秒

        If a Then '如果ping通就退出for循环

            Exit For

        End If

    Next

    If a Then '如果内网Ping通,则用内网地址

        IPa=IP1

    Else '否则用外网地址

        IPa=IP2

    End If

e.ConnectionString ="Provider=SQLOLEDB.1;Password=12345678;Persist Security Info=True;User ID=shenyl0211;Initial Catalog=" & sfile & ";Data Source=" & IPa

由于登录服务器SQL server的用户shenyl0211固定、密码12345678固定,所以无须引入变量

End If


3、与IP地址无关性的全自动升级的代码

详见:

http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=37839&replyID=&skin=1

http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=27687&replyID=&skin=1

注意:需要定义2个升级按钮,如:发布上传、系统升级

如果你本次发布时的狐表版本日期与上次一样,则使用发布上传按钮,升级文件包仅包含修改了的、你自己开发的软件文件;

否则使用系统升级按钮,但要预先查看狐表升级了哪些文件(根据文件的修改日期)、然后修改一个批命令文件(即更改狐表的升级文件名),升级文件包除了比发布上传多增加该批命令文件外,还要增加该批命令文件提及的狐表系统文件,但这种增加是全自动的。






 回到顶部