在PB程序中如何测试网络连接是否中断
2011-02-25 11:08
429 查看
添加者:Ericwoo, 最后更新者: Ericwoo 于 二月 20, 2009 (查看变更)
原作者:hygougou http://topic.csdn.net/t/20050412/18/3930736.html
出于这样的考虑:
connect using sqlca //如果远程数据库网络不通,这句语句将会耗费比较长的时间等待。所以考虑速度的问题,在连接之前现判断网络是否连通,如果连通则执行这句,不通则提示。
//声明全局变量global var
string password_,password_hcy=""
long dw_address
dec dj[]
Constant String ver_old="2K3.11(20)"
//声明全局外部函数global ext fun
function ulong CreateMutexA (ulong lpMutexAttributes, int bInitialOwner, ref string lpName) library "kernel32.dll"
function ulong GetLastError () library "kernel32.dll"
Function long IcmpCreateFile() Library"icmp.dll"
Function long IcmpCloseHandle(ulong IcmpHandle)Library"icmp.dll"
Function long IcmpSendEcho(ulong IcmpHandle1,ulong DesAddress,string requestdata,long datasize,ulong requestoption,ref ICMP_ECHO_REPLY replybuffer,ulong Replysize,ulong timeout)Library"icmp.dll"
function int ShellAboutA( ulong al_hWnd, string as_szApp, string as_szOtherStuff, ulong hIcon ) library "shell32"
//声明结构
1、type icmp_echo_reply from structure
unsignedlongaddress
unsignedlongstatus
unsignedlongroundtriptime
unsignedlongdatasize
unsignedlongreserved
unsignedlongdatapointer
icmp_optionsoptions
stringdata
2、icmp_options from structure
characterTtl
characterTos
characterFlags
characterOptionsSize
characterOptionsData
//函数,f_isipaddress
/*----------------------
功能:判断是否IP有效地址
传入:string f_p_address
返回:boolean
------------------------*/
string a_s[16],as_1[4]
int a_dot[3]
int i,j
j=1
for i=1 to 16
a_s[i]=mid(f_p_address,i,1)
if a_s[i]="." then
a_dot[j]=i
j++
end if
next
if j<>4 then return false
if a_dot[2]=a_dot[1]+1 or a_dot[3]=a_dot[2]+1 then
return false
end if
for i=1 to a_dot[1] - 1
as_1[1]=as_1[1]+a_s[i]
next
for i=a_dot[1]+1 to a_dot[2] - 1
as_1[2]=as_1[2]+a_s[i]
next
for i=a_dot[2]+1 to a_dot[3] - 1
as_1[3]=as_1[3]+a_s[i]
next
for i=a_dot[3]+1 to 16
as_1[4]=as_1[4]+a_s[i]
next
for i=1 to 4
if long(as_1[i])>255 or long(as_1[i])<0 then
return false
exit
end if
next
dw_address=long(as_1[4])*16777216+long(as_1[3])*65536+long(as_1[2])*256+long(as_1[1])
return true
--------------------------------------------------------------------------
函数f_ping
/*----------------------
功能:pingIP有效地址
传入:string u_ipaddress
返回:无
------------------------*/
if f_isipaddress(u_ipaddress) then
else
setprofilestring("ping.ini","properties","result","Ping Failure")
end if
long l_hPort
string s_DataToSend
long l_iOpt
ICMP_ECHO_REPLY echo
s_DataToSend="Send this characters"
long strlen
l_hport=0
strlen=len(s_datatosend)
l_hPort=IcmpCreateFile()
long rtn
rtn=0
dw_address=long(u_ipaddress)
rtn=IcmpSendEcho(l_hPort,dw_address,s_DataToSend,strlen,0,echo,56,200)
if rtn=1 then
//messagebox("Hello","Ping successful")
setprofilestring("ping.ini","properties","result","Ping Successful")
setprofilestring("ping.ini","properties","flag","1")
else
setprofilestring("ping.ini","properties","result","Ping Failure")
setprofilestring("ping.ini","properties","flag","1")
end if
long l_rtn
l_rtn=IcmpCloseHandle(l_hPort)
dw_address=0
// 窗口实例子变量:int return_b
// open事件
Timer(0.5)
//Timer事件
timer(0)
idle(1)
//SQLCA.DBMS = "O73 ORACLE 7.3"
//SQLCA.LogPass = "zxcvbn"
//SQLCA.ServerName = "@mybzk"
//SQLCA.LogId = "bzk22"
//SQLCA.AutoCommit = False
//SQLCA.DBParm = "CommitOnDisconnect='NO'"
label1:
f_ping(STRING(f_ipaddressany('192.168.1.1')))
if ProfileString("ping.INI", "properties", "Result","None")="Ping Successful" then
//CONNECT USING SQLCA;
//if sqlca.sqlcode<>0 then
// messagebox("错误","能连通指定的IP地址,但远程服务器未提供数据服务~r~n"sqlca.sqlerrtext"~r~n~r~n远程服务器未启动或网络配置问题",StopSign!,RetryCancel!)
// HALT close
//else
w_logo.height=1593
sle_1.setfocus()
//end if
else
return_b=messagebox("错误","与中实运业IP地址通迅失败~r~n原因:①远程服务器关机~r~n>>>>>>②网络太忙,稍后再试~r~n>>>>>>③网络中断",StopSign!,RetryCancel!)
choose case return_b
case 1
goto label1
case 2
HALT close
end choose
end if
----屏蔽的代码是连接数据库的代码,自己适当修改
不过,确实漏了一函数,不过不是PING的函数
f_ipaddressany
// 传:string f_p_address
// 返:long
string a_s[16],as_1[4]
int a_dot[3]
int i,j
j=1
for i=1 to 16
a_s[i]=mid(f_p_address,i,1)
if a_s[i]="." then
a_dot[j]=i
j++
end if
next
//if j<>4 then return false
if a_dot[2]=a_dot[1]+1 or a_dot[3]=a_dot[2]+1 then
//return false
end if
for i=1 to a_dot[1] - 1
as_1[1]=as_1[1]+a_s[i]
next
for i=a_dot[1]+1 to a_dot[2] - 1
as_1[2]=as_1[2]+a_s[i]
next
for i=a_dot[2]+1 to a_dot[3] - 1
as_1[3]=as_1[3]+a_s[i]
next
for i=a_dot[3]+1 to 16
as_1[4]=as_1[4]+a_s[i]
next
for i=1 to 4
if long(as_1[i])>255 or long(as_1[i])<0 then
//return false
exit
end if
next
long ll_return
ll_return=long(as_1[4])*16777216+long(as_1[3])*65536+long(as_1[2])*256+long(as_1[1])
return ll_return
原作者:hygougou http://topic.csdn.net/t/20050412/18/3930736.html
出于这样的考虑:
connect using sqlca //如果远程数据库网络不通,这句语句将会耗费比较长的时间等待。所以考虑速度的问题,在连接之前现判断网络是否连通,如果连通则执行这句,不通则提示。
//声明全局变量global var
string password_,password_hcy=""
long dw_address
dec dj[]
Constant String ver_old="2K3.11(20)"
//声明全局外部函数global ext fun
function ulong CreateMutexA (ulong lpMutexAttributes, int bInitialOwner, ref string lpName) library "kernel32.dll"
function ulong GetLastError () library "kernel32.dll"
Function long IcmpCreateFile() Library"icmp.dll"
Function long IcmpCloseHandle(ulong IcmpHandle)Library"icmp.dll"
Function long IcmpSendEcho(ulong IcmpHandle1,ulong DesAddress,string requestdata,long datasize,ulong requestoption,ref ICMP_ECHO_REPLY replybuffer,ulong Replysize,ulong timeout)Library"icmp.dll"
function int ShellAboutA( ulong al_hWnd, string as_szApp, string as_szOtherStuff, ulong hIcon ) library "shell32"
//声明结构
1、type icmp_echo_reply from structure
unsignedlongaddress
unsignedlongstatus
unsignedlongroundtriptime
unsignedlongdatasize
unsignedlongreserved
unsignedlongdatapointer
icmp_optionsoptions
stringdata
2、icmp_options from structure
characterTtl
characterTos
characterFlags
characterOptionsSize
characterOptionsData
//函数,f_isipaddress
/*----------------------
功能:判断是否IP有效地址
传入:string f_p_address
返回:boolean
------------------------*/
string a_s[16],as_1[4]
int a_dot[3]
int i,j
j=1
for i=1 to 16
a_s[i]=mid(f_p_address,i,1)
if a_s[i]="." then
a_dot[j]=i
j++
end if
next
if j<>4 then return false
if a_dot[2]=a_dot[1]+1 or a_dot[3]=a_dot[2]+1 then
return false
end if
for i=1 to a_dot[1] - 1
as_1[1]=as_1[1]+a_s[i]
next
for i=a_dot[1]+1 to a_dot[2] - 1
as_1[2]=as_1[2]+a_s[i]
next
for i=a_dot[2]+1 to a_dot[3] - 1
as_1[3]=as_1[3]+a_s[i]
next
for i=a_dot[3]+1 to 16
as_1[4]=as_1[4]+a_s[i]
next
for i=1 to 4
if long(as_1[i])>255 or long(as_1[i])<0 then
return false
exit
end if
next
dw_address=long(as_1[4])*16777216+long(as_1[3])*65536+long(as_1[2])*256+long(as_1[1])
return true
--------------------------------------------------------------------------
函数f_ping
/*----------------------
功能:pingIP有效地址
传入:string u_ipaddress
返回:无
------------------------*/
if f_isipaddress(u_ipaddress) then
else
setprofilestring("ping.ini","properties","result","Ping Failure")
end if
long l_hPort
string s_DataToSend
long l_iOpt
ICMP_ECHO_REPLY echo
s_DataToSend="Send this characters"
long strlen
l_hport=0
strlen=len(s_datatosend)
l_hPort=IcmpCreateFile()
long rtn
rtn=0
dw_address=long(u_ipaddress)
rtn=IcmpSendEcho(l_hPort,dw_address,s_DataToSend,strlen,0,echo,56,200)
if rtn=1 then
//messagebox("Hello","Ping successful")
setprofilestring("ping.ini","properties","result","Ping Successful")
setprofilestring("ping.ini","properties","flag","1")
else
setprofilestring("ping.ini","properties","result","Ping Failure")
setprofilestring("ping.ini","properties","flag","1")
end if
long l_rtn
l_rtn=IcmpCloseHandle(l_hPort)
dw_address=0
// 窗口实例子变量:int return_b
// open事件
Timer(0.5)
//Timer事件
timer(0)
idle(1)
//SQLCA.DBMS = "O73 ORACLE 7.3"
//SQLCA.LogPass = "zxcvbn"
//SQLCA.ServerName = "@mybzk"
//SQLCA.LogId = "bzk22"
//SQLCA.AutoCommit = False
//SQLCA.DBParm = "CommitOnDisconnect='NO'"
label1:
f_ping(STRING(f_ipaddressany('192.168.1.1')))
if ProfileString("ping.INI", "properties", "Result","None")="Ping Successful" then
//CONNECT USING SQLCA;
//if sqlca.sqlcode<>0 then
// messagebox("错误","能连通指定的IP地址,但远程服务器未提供数据服务~r~n"sqlca.sqlerrtext"~r~n~r~n远程服务器未启动或网络配置问题",StopSign!,RetryCancel!)
// HALT close
//else
w_logo.height=1593
sle_1.setfocus()
//end if
else
return_b=messagebox("错误","与中实运业IP地址通迅失败~r~n原因:①远程服务器关机~r~n>>>>>>②网络太忙,稍后再试~r~n>>>>>>③网络中断",StopSign!,RetryCancel!)
choose case return_b
case 1
goto label1
case 2
HALT close
end choose
end if
----屏蔽的代码是连接数据库的代码,自己适当修改
不过,确实漏了一函数,不过不是PING的函数
f_ipaddressany
// 传:string f_p_address
// 返:long
string a_s[16],as_1[4]
int a_dot[3]
int i,j
j=1
for i=1 to 16
a_s[i]=mid(f_p_address,i,1)
if a_s[i]="." then
a_dot[j]=i
j++
end if
next
//if j<>4 then return false
if a_dot[2]=a_dot[1]+1 or a_dot[3]=a_dot[2]+1 then
//return false
end if
for i=1 to a_dot[1] - 1
as_1[1]=as_1[1]+a_s[i]
next
for i=a_dot[1]+1 to a_dot[2] - 1
as_1[2]=as_1[2]+a_s[i]
next
for i=a_dot[2]+1 to a_dot[3] - 1
as_1[3]=as_1[3]+a_s[i]
next
for i=a_dot[3]+1 to 16
as_1[4]=as_1[4]+a_s[i]
next
for i=1 to 4
if long(as_1[i])>255 or long(as_1[i])<0 then
//return false
exit
end if
next
long ll_return
ll_return=long(as_1[4])*16777216+long(as_1[3])*65536+long(as_1[2])*256+long(as_1[1])
return ll_return
相关文章推荐
- PB程序中如何测试网络连接是否中断?(实现Ping命令)
- PB程序中如何测试网络连接是否中断?(实现Ping命令)
- PB程序中如何测试网络连接是否中断?
- 『转』android 程序中判断当前是否连接网络,网络是否可用
- 如何中断与网络资源的连接
- iOS 如何判断当前网络连接状态 网络是否正常 网络是否可用
- android判断程序是否连接网络
- GTK 程序 检测 网线是否连接 本地网络状态 C语言实现
- 【ios开发】如何判断当前网络连接状态(网络是否正常)
- 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接)
- 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL
- 如何测试两台电脑是否可以连接
- java测试网络连接是否成功并设置超时时间
- 手机上的android程序如何连接上电脑上Tomcat网页并访问网络
- 测试网络是否连接
- android程序连接网络测试:连接失败的原因。
- Android中如何简单检测网络是否连接
- 首次测试android程序连接网络错误:java.net.unknownhostexception:unable to resolve host
- [FUNC]ahk如何判断是否连接网络?
- 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL