|
P>当今的时代是网络的时代,通过拨号连接实现计算机之间的相互通讯也成为一个热门的话题。在实际的开发过程中,你一定会遇到类似的问题:如何在PB中实现拨号连接,让一个远程的计算机通过拨号连接登录到系统的服务器中,并上传、下载或者读取其中的数据?
AS16&32是我在网上碰到的,解决该问题最酷的一个pbl。
RAS16&32简介
Ras16&32是Arthur Hefti的CATsoft公司的产品,完全free。在许多PB的网站都可以看到他的踪迹。它包含了16和32位的代码,可以自动适应16位和32位的平台。
该PBL包含了以下内容: ? N_ras_16。16位的拨号连接对象 ? N_ras_32。32位的拨号连接对象
? W_help。帮助窗体, 有和作者联系的方法和版权声明等信息。 ? W_m_ras。主窗体。
函数简介
函 数 功 能 of_Dial() 最重要的函数,功能?当然是拨号了 Of_getmessagenr() 注册RasDialEvent消息
Of_errortext() 根据一个整型的错误号返回相应的错误信息 Of_statustext() 返回当前连接的状态。
一个非常重要的函数, 让用户知道现在到底发生了什么事情。
使用说明
1. 电话号码
缺省地,该PBL要求用户使用phonebookentry来指定电话号码和连接参数,如果直接输入电话号码,它会毫不犹豫地弹出一个对话框“error
no is 623.”. 而通常地,我们只想指定一个电话号码就和远程的服务器进行连接。解决的办法很简单,只需要修改of_dial()即可。
以下以n_ras_32为例子(n_ras_16类似):
打开of_dial()函数,可以看到以下代码
lstr_RDP.szEntryName = as_Entry
lstr_RDP.szPhoneNumber[1] = Char(0) …
只要把这两行修改为:
lstr_RDP.szEntryName[1] = char(0)
lstr_RDP.szPhoneNumber = as_entry …
OK!马上通过!
2. 域名
拨号连接成功后,如果必须进行身份验证,则要指定域名。该参数在连接的结构参数lstr_RDP中,ras16&32中给域赋的值是
szDomain = *星号表示域名保存在phonebookentry中,而我们现在使用了直接的电话号码连接,所以要区分以下三种情况:
服务器是独立的服务器。无须修改,可以进行正常的连接。但问题是,如果输入了错误的用户名和密码,则登录失败时系统没有任何提示。
服务器是域控制器。必须输入正确的域名。
》衿魇怯虺稍保皇侵饔蚩刂破鳌8掣桓隹沾?
3. 如何显示当前的连接状态
在主窗体的open事件中通过Of_getmessagenr()注册了相应的消息,然后在窗体的OTHER事件中捕获该消息并进行处理:
IF message.number = iui_rasmsg then //iui_rasmsg是该消息的句柄
st_status.Text = inv_ras.of_StatusText( message.wordparm
) //通过of_statustext()显示该消息
END IF
4. 连接成功后?
同样在窗体的other事件中处理。
在判断消息句柄是iui_rasmsg后,判断是否已经成功连接:
IF message.number = iui_rasmsg then
If message.wordparm=8192 then <连接成功后的代码> //打开n_ras_16的of_getstatustext()可以看到
8192是成功连接的消息代码。
5. 其他要注意的问题
如果用户启动windows时登录了网络,则使用用户登录时的用户名和密码连接。而忽略在RAS连接时指定的用户名和密码。这种情况应该避免。
如果用户启动windows时没有登录网络,则使用程序中指定的用户名和密码连接。
|