Cita:
Empezado por Crandel
Nunca lo hice pero podrias probar hacer un ping a un puerto específico. Creo que la suite de Indy trae un componente para hacer ping.
|
Hasta donde yo se "ping" utiliza el protocolo ICMP que no tiene puertos.
En cuanto a la pregunta urtKami no conozco otra forma de hacerlo que intentar conectar con ese puerto, si podemos esta abierto, si no podemos esta cerrado
Código Delphi
[-]
uses WinSock;
function EstaAbierto(Host: string; Puerto: Integer): Boolean;
var
WSAData: TWSADATA;
Address: u_long;
HostEnt: phostent;
Addr: sockaddr_in;
CSocket: Tsocket;
begin
Result:= FALSE;
if WSAStartup(MAKEWORD(1, 1), WSADATA) = 0 then
begin
Address:= inet_addr(Pchar(Host));
if Address = INADDR_NONE then
begin
HostEnt:= gethostbyname(PChar(Host));
if HostEnt <> nil then
Address:= PInteger(HostEnt.h_addr_list^)^;
end;
if Address <> INADDR_NONE then
begin
CSocket:= socket(AF_INET, SOCK_STREAM, 0);
if CSocket <> INVALID_SOCKET then
begin
Addr.sin_family:= AF_INET;
Addr.sin_addr.S_addr:= Address;
Addr.sin_port:= htons(Puerto);
Result:= connect(CSocket, Addr, Sizeof(Addr)) <> SOCKET_ERROR;
Closesocket(CSocket);
end;
end;
WSACleanup;
end;
end;
if EstaAbierto('www.clubdelphi.com',80) then
ShowMessage('Esta abierto')
else
ShowMessage('Esta cerrado');
PD: Si el puerto esta cerrado, puede que tarde un rato en responder, ten paciencia