Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   (Deplhi) Algunas Preguntas... (https://www.clubdelphi.com/foros/showthread.php?t=34529)

Lautarox 12-08-2006 03:44:57

(Deplhi) Algunas Preguntas...
 
Wenazzz...
Tengo un par de preguntas... que estaria muy agradecido si me las solucionaran...
Como seria una sentencia if que diria si una procedure fue cumplida con exito?
Como podria saber si un port esta habierto? Cual seria el codigo?
No se si el post esta bien ubicado... si no perdonen.

Desde Ya Gracias...

seoane 12-08-2006 04:25:43

Eso depende de lo que entiendas tu por el éxito de un procedure, dado que un procedure, por definición, no devuelve valor alguno. ¿Podrías aclarar un poco mas este punto?.

En cuanto al "Port", si estamos hablando de sockets, y quieres saber si un puerto ya esta ocupado por otra aplicación, puedes hacerlo de varias maneras. Una es intentar usarlo tu, y si no puedes, es que esta siendo usado por otro.

Lautarox 12-08-2006 05:17:55

Quisiera que si un "proceso" del programa es realizado bien, cumpla otra cierta funcion.
Y sobre los ports, me podrias postear un codigo de mas o menos como seria probar si el port esta ocupado? Port TCP

Lepe 12-08-2006 10:09:11

En cuanto a la primera pregunta, tienes varias formas:

Si tienes que usar un procedure, deberá añadir un parámetro que se modifica según convenga. Creo que lo propio es usar una función; te dejo ambos ejemplos:

Código Delphi [-]

procedure Hazlo( var ObjetivoCumplido:Boolean);
begin
 // hacer todas las tareas

 if NoError then
   ObjetivoCumplido := true
 else
   ObjetivoCumplido := false;
end;

function HacerTarea :Boolean;
begin
  if noerror then 
    Result := true
  else 
   Result := false;
end;

procedure Preguntando;
var Cumplido:Boolean;

Cumplido := false;
Hazlo(cumplido);
if Cumplido then
  ShowMessage(' hizo bien la tarea')
else
  ShowMessage(' NO hizo bien la tarea');

cumplido := HacerTarea;
ShowMessage(BooltoStr(cumplido, true));

// Un código más elegante puede ser:
if HacerTarea then
begin
  // lo que sea
end;
end;

seoane 12-08-2006 12:17:52

Cita:

Empezado por Lautarox
Y sobre los ports, me podrias postear un codigo de mas o menos como seria probar si el port esta ocupado? Port TCP

Claro que puedo, pero eso depende de los componentes que quieras usar. si por ejemplo estas usando TServerSocket o TIdTCPServer de Indy podríamos utilizar algo como esto:
Código Delphi [-]
try
  ServerSocket.Active:= TRUE;
except
  ShowMessage('El puerto ya esta en uso');
end;

Si lo que quieres es encontrar un puerto libre, puedes usar algo como esto, que encuentra el primer puerto libre a partir del 1024:
Código Delphi [-]
ServerSocket.Port:= 1024;
While not ServerSocket.Active do
try
  ServerSocket.Active:= TRUE;
except
  ServerSocket.Port:= ServerSocket.Port + 1;
end;

Y si no quieres usar ningun componente puede utilizar esta función,que devuelve TRUE si el puerto esta en uso:
Código Delphi [-]
uses WinSock;       // Es importante añadir esto a las uses

function EnUso(Puerto: Integer): Boolean;
var
  WSADATA: TWSADATA;
  ServerSocket: TSocket;
  LocalAddr: TSockaddr;
begin
  Result:= TRUE;
  // Inicializamos Winsock
  if WSAStartup(MAKEWORD(1, 1), WSADATA) = 0 then
  try
    // Creamos el socket del servidor
    ServerSocket := socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
    if ServerSocket <> INVALID_SOCKET then
    begin
      with LocalAddr do
      begin
        sin_family := AF_INET;
        // Aqui colocamos el puerto a usar
        sin_port := htons(Puerto);
        sin_addr.s_addr := htonl(INADDR_ANY);
      end;
      // Ponemos el socket a la escucha ...
      if bind(ServerSocket, LocalAddr, sizeof(LocalAddr)) <> SOCKET_ERROR then
        if listen(ServerSocket, SOMAXCONN) <> SOCKET_ERROR then
          Result:= FALSE;
      CloseSocket(ServerSocket);
    end;
  finally
    WSACleanup();
  end;
end;

Por ultimo, si lo que quieres es algo un poco mas potente que nos haga un listado con todos los puertos abiertos de nuestro equipo, como hace el comando "NetStat -a" puedes echarle un vistazo a este programa que publique hace unos dias aqui que es un clon del NetStat y esta echo en delphi.

Lautarox 12-08-2006 16:15:50

Me han sorprendido :O la verdad que me ayudaron muchisimo, les estoy muy agradecido; el proyecto que estoy haciendo es un port scanner q supuestamente scanearia los puertos de una determinada ip y si encuentra algun port que usa un troyano sale una alerta :P, es solo x seguridad por si alguna de esas pensas q estas infectado, siempre hay q darle un vistazo a los ports...
Alguna idea de como podria hacer que la procedure se haga muchas veces scaneando un diferente port hasta llegar a una variable maxima?

nemesio 13-08-2006 16:55:23

Utiliza un ciclo, y revisa los puertos con él.

Saludos


La franja horaria es GMT +2. Ahora son las 12:37:12.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi