我调用connect方法后,出现异常,异常可能是dns解析错误,或者服务器连接错误等,那我怎么才能获得具体是什么类型的错误异常呢?例如:
try
FTP.Connect;
except
case ()of
//Application.MessageBox('adf','adf',MB_OK);
end;
这里的case of怎么写才会将不同才异常取出呢?
例如如果是dns解析失败,则提示dns解析错误,服务器连接错误就提示服务器未开启等等请教
try
FTP.Connect;
except
case ()of
//Application.MessageBox('adf','adf',MB_OK);
end;
这里的case of怎么写才会将不同才异常取出呢?
例如如果是dns解析失败,则提示dns解析错误,服务器连接错误就提示服务器未开启等等请教
Result := UrlDownloadToFile(nil, PChar(source), PChar(Dest), 0, nil) = 0;
except
on E: Exception do begin
ShowMessage('error:'+ e.Message);
Result := False;
end;
end;
转到bcb中对应是?
bcb中的
try
{
}
catch()
{
}catch括号里面的好像是类型
try
FTP.Connect;
except
case GetLastError of
9001:ShowMessage('DNS 服务器无法解释格式');
9002:ShowMessage('DNS 服务器失败');
10060:ShowMessage('由于连接方在一段时间后没有正确的答复或连接的主机没有反应,连接尝试失败');
10061:ShowMessage('能做任何连接,因为目标机器积极地拒绝它');
...
end;
end;
getlasterror我试过了,的确不行,那么这时怎么才能取得正确的错误号呢?难道要对错误message进行比较?
try
FTP.Connect;
except
on E:EIdSocketError do
begin
case E.LastError of
9001:ShowMessage('DNS 服务器无法解释格式');
9002:ShowMessage('DNS 服务器失败');
10060:ShowMessage('由于连接方在一段时间后没有正确的答复或连接的主机没有反应,连接尝试失败');
10061:ShowMessage('不能做任何连接,因为目标机器积极地拒绝它');
end;
end;
end;
begin
try
IdFTP1.Connect;
except
On E:Exception do begin
if E is EIdSocketError then begin
case EIdSocketError(E).LastError of
WSANOTINITIALISED: ShowMessage('未应用程序没有调用 WSAStartup,或者 WSAStartup 失败,或者在此之前调用了 WSACleanup。');
WSAENETDOWN: ShowMessage('套接字操作遇到了一个已死的网络。网络子系统已经失效.');
WSAEADDRINUSE: ShowMessage('端口被占用,通常每个套接字地址(协议/网络地址/端口)只允许使用一次。');
WSAEINTR: ShowMessage('一个封锁(阻塞)操作被使用 WSACancelBlockingCall 的调用中断。');
WSAEINPROGRESS: ShowMessage('目前正在执行一个阻塞性操作。');
WSAEALREADY:ShowMessage('在一个非阻塞性套接字上尝试了一个已经在进行的操作。 ');
WSAEADDRNOTAVAIL:ShowMessage('请求的地址无效。');
WSAEAFNOSUPPORT: ShowMessage('使用了与请求的协议不兼容的地址。');
WSAECONNREFUSED: ShowMessage('连接被远程主机拒绝');
WSAEFAULT: ShowMessage('系统检测到在一个调用中尝试使用指针参数时的无效指针地址。');
WSAEINVAL: ShowMessage('提供了一个无效的参数。连接所使用的套接字描述符可能正在监听中。');
WSAEISCONN: ShowMessage('在一个已经连接的套接字上做了一个连接请求。');
WSAENETUNREACH: ShowMessage('向一个无法连接的网络尝试了一个套接字操作');
WSAEHOSTUNREACH: ShowMessage('套接字操作尝试一个无法连接的主机。');
WSAENOBUFS: ShowMessage('由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作。');
WSAENOTSOCK: ShowMessage('在一个非套接字上尝试了一个操作。套接字描述符(Socket)无效');
WSAETIMEDOUT: ShowMessage('由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。');
WSAEWOULDBLOCK:ShowMessage('无法立即完成一个非阻止性套接字操作。在非阻塞操作当中,通常此错误表示操作成功。');
WSAEACCES: ShowMessage('以一种访问权限不允许的方式做了一个访问套接字的尝试。');
end;
end;
end;
end;end;