什么是VB6、CGI、API?,第1张

VB 全称Visual Basic,是当今世界上应用最广泛的编程语言之一,它也被公认为是编程效率最高的一种编程方法。无论是开发功能强大、性能可靠的商务软件,还是编写能处理实际问题的实用小程序,VB都是最快速、最简便的方法。VB6 即Visual Basic的60版本。

CGI 即Common Gateway Interface(公共网关接口)。它是运行于网络服务器上的一类程序,用于一个可以产生相同结果或随用户输入而变化结果的程序。CGI 程序通常用于完成 Web 网页中表单数据的处理、数据库查询和实现与传统应用系统的集成等工作。

API 全称Application Programming Interface(应用编程接口),是Windows平台的应用程序编程接口。它是能用来操作组件、应用程序或者操作系统的一组函数。典型的情况下,API 由一个或多个提供某种特殊功能的 DLL 组成。

在 VB 中 程序中引用 Internet Explorer 对象 :在"工程"菜单中单击"引用",在弹出对话框中选择"Microsoft Internet Controls"(SHDOCVWDLL),就把对 Internet Explorer对象库的引用添加到了我们自己的工程文件中。

'使用IE对象打开一个网页 :

Dim Browser As Object

Set Browser = CreateObject("InternetExplorerApplication")

BrowserVisible = True

BrowserNavigate ("http://wwwbaiducom")

'得到当前browser的页面字体内容

Public Function getWebContent()Function getWebContent(browser As WebBrowser) As String

Dim doc As Object

Dim i As Object

Dim strHtml As String

Set doc = browserDocument

For Each i In docAll

strHtml = strHtml & Chr(13) & iinnerText

Next

getWebContent = strHtml

End Function

'得到当前browser的页面Html内容

Public Function getWebHtml()Function getWebHtml(browser As WebBrowser) As String

Dim doc As Object

Dim i As Object

Dim strHtml As String

Set doc = browserDocument

For Each i In docAll

strHtml = strHtml & Chr(13) & iinnerHtml

Next

getWebHtml = strHtml

End Function

分析了一下你的问题,有几点问题你需要排查:

1、既然是动态域名,那么你的数据库服务器应该面对的是公网。如果是公网,局域网IP连接是否成功就毫无意义。

2、你有否尝试过使用公网IP连接,如果使用公网IP连接成功,那就有可能是域名解析的问题。

3、你是否设置好了路由器的端口映射,分析你的题目,我估计你网络状态可能是多层路由,那么多层路由的端口映射是否都设置好了?还是只设置了一层?

4、如果设置好了端口映射,是不是还有端口号的问题,虽然我没有尝试过,但是由于你的两台电脑可以通过局域网IP连接,可以看出两台电脑虽处于不同网段,但共同使用一个路由接入公网,这样会不会产生端口号冲突?可以尝试修改数据库服务器的SQL SERVER的端口号,并进行映射。

5、服务器上的数据库是使用默认实例名还是指定实例名,如果是指定实例名要在服务器名后加上实例名。

6、建议,局域网内使用局域网IP连接,局域网外使用域名连接。测试也要放在局域网外测试才有意义。

自己定义一个结构体发字节流过去不就可以了。建议把字节流封包传输

如:

第1个字节 &HB1 表示包头开始标志

第2个字节 &H01 表示发送数据命令

第3-4个字节 &H0005 表示数据长度为5个字节

第5个字节 &H00 具体的数据第1个字节内容

第6个字节 &H00 具体的数据第2个字节内容

第7个字节 &H00 具体的数据第3个字节内容

第8个字节 &H00 具体的数据第4个字节内容

第9个字节 &H00 具体的数据第5个字节内容

第10个字节 &HB5 从包头开始逐个进行异或运算的“异或校检码”,校检数据的完整性用

第11个字节 &HB2 表示包尾

上面这个包主要由6个部分组成

1、包头 用来进行包的初始化识别

2、命令 扩展包协议用,如传输语句、传输控制指令、移动记录等

3、数据长度 我这里的例子是用两个字节表示长度,即最多一个包传输65536个字节的数据

4、数据区域 具体要传输的数据段落

5、异或校检码 为了检测数据的完整性,也可以用CRC16或CRC32等算法进行数据校检

6、包尾 用来完整识别一个包内容的结束标志

通过上面这个包结构,可以在数据包里放置小于65536个字节的内容进行传输

在处理传输数据时可以这么做:

Type SendReport

sr_head As Byte ' 固定为 &HB1

sr_cmd As Byte ' 命令

sr_size As Integer ' 数据大小

sr_data() As Byte ' 数据内容

sr_xor As Byte ' 异或校检码

sr_end As Byte ' 固定为 &HB2

End Type

Type SendRF

rs_type As Integer ' 字段类型

rs_NameSize As Integer ' 字段名称字节数

rs_name() As Byte ' 字段名称内容

rs_size As Integer ' 字段数据大小

rs_data() As Byte ' 字段数据内容

End Type

Type SendRS

rs_fcount As Integer ' 字段数量

rs_data() As SendRF ' 字段数据

End Type

然后把数据集的数据赋值到上面的机构体里,再把结构体的数据格式化到一个字节数组中,便可把这个字节数组发送出去,接收端只要根据格式提取出相关数据到结构体,就可以实现数据的还原过程。在过程里只要善用 CopyMemory API 就可以很容易实现这种过程的处理,如

Dim SR As SendReport

Dim SentBytes() as Byte

Dim i As Long

SRsr_head = &HB1:SRsr_xor = SRsr_head

SRsr_cmd = &H01:SRsr_xor = SRsr_xor xor SRsr_cmd

SRsr_size = &H05:SRsr_xor = SRsr_xor xor SRsr_size

Redim SRsr_data(4)

for i=0 to ubound(SRsr_data)

SRsr_xor = SRsr_xor xor SRsr_data(i)

next i

SRsr_end = &HB2

Redim SentBytes(10)

CopyMemory SentBytes(0),SRsr_head,1

CopyMemory SentBytes(1),SRsr_cmd,1

CopyMemory SentBytes(2),SRsr_size,2

CopyMemory SentBytes(4),SRsr_data(0),5

SentBytes(Ubound(SentBytes)-1) = SRsr_xor

SentBytes(Ubound(SentBytes)) = SRsr_end

Winsock1SendData SentBytes

当然上面只是封包的过程,没有设置具体的数据集数据,不过原理也差不多,也就是读写SendRF和SendRS结构的问题。具体的自己做做看吧。

用ADO远程连接SQL的编写方式和局域网内部的是一样的,如果你在内网能够访问SQL的话,那么在公网上你需要在远端路由器上开启IP地址及端口映射,比如,SQL服务器的内网IP 是192168225 而外网地址是125505861 的话,你就必须在路由器上 添加125505861:443 到 192168225:443的映射记录。最好在SQL服务器上的防火墙里也添加上443端口例外。然后在程序里指定ADO的连接地址为125505861(SQL服务器的外网地址) 最后补充一下,通过公网直接访问SQL是不推荐的做法,主要是因为安全问题以及效率问题。一般的做法是在服务器端开发相应的数据服务程序,用于和客户端通信。建议你看看B/S和C/S两种架构。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 什么是VB6、CGI、API?

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情