以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- [分享]外网IP地址和城市的获取、与IP地址无关性全自动登录和全自动升级 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=38453) |
-- 作者:shenyl0211 -- 发布时间:2013/7/29 21:37:00 -- [分享]外网IP地址和城市的获取、与IP地址无关性全自动登录和全自动升级 如题,是狐友关注比较多的问题。 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/,如果不需要获取城市代码,采用
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个升级按钮,如:发布上传、系统升级 如果你本次发布时的狐表版本日期与上次一样,则使用发布上传按钮,升级文件包仅包含修改了的、你自己开发的软件文件; 否则使用系统升级按钮,但要预先查看狐表升级了哪些文件(根据文件的修改日期)、然后修改一个批命令文件(即更改狐表的升级文件名),升级文件包除了比发布上传多增加该批命令文件外,还要增加该批命令文件提及的狐表系统文件,但这种增加是全自动的。 |
-- 作者:小刚 -- 发布时间:2013/7/29 21:53:00 -- 谢谢分享~ |
-- 作者:qq121454970 -- 发布时间:2013/7/29 22:45:00 -- 谢谢分享 |
-- 作者:lsy -- 发布时间:2013/7/29 22:53:00 -- 不错。 |
-- 作者:夕然 -- 发布时间:2013/7/29 23:02:00 -- 谢谢虽然现在还用不上呢 |
-- 作者:ztmdnzc -- 发布时间:2013/8/2 12:56:00 -- 怎么没见狐爸的帖子呢?忙着升级呢? |
-- 作者:xiaoxinla -- 发布时间:2013/8/4 12:00:00 -- 谢谢分享 |
-- 作者:Gryvip -- 发布时间:2013/8/5 21:05:00 -- 谢谢分享,顶上去 |
-- 作者:李孝春 -- 发布时间:2013/12/18 23:40:00 -- 感谢分享 但是如果仅仅是获得本地电脑IP 网关 子网掩码 DNS怎么操作呢? |
-- 作者:188802386 -- 发布时间:2014/5/17 22:50:00 -- 谢谢分享 |