Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-10-2014
cmfab cmfab is offline
Miembro
 
Registrado: jun 2010
Posts: 419
Poder: 14
cmfab Va por buen camino
Servidor DataSnap

Hola a todos, tengo un servidor DataSnap, sucede que la aplicación cliente cada cierto intervalo debe conprobar si existe este servidor en la IP y puerto determinados, para concocer esto uso la función siguiente:

Código Delphi [-]
function PortTCP_IsOpen(dwPort : Word; ipAddressStr:AnsiString) : boolean;
var
  client : sockaddr_in;
  sock : Integer;
  ret : Integer;
  wsdata : WSAData;
begin
  Result:=False;
  ret := WSAStartup($0002, wsdata); //Inicializa Winsock
  if ret<>0 then exit;

  try
   client.sin_family := AF_INET; //Establece el protocolo a usar en este caso (IPv4)
   client.sin_port := htons(dwPort);
   client.sin_addr.s_addr := inet_addr(PAnsiChar(ipAddressStr));
   sock :=socket(AF_INET, SOCK_STREAM, 0); //crea un socket
   Result:=connect(sock,client,SizeOf(client))=0; //Estable conexión con un socket
   finally
     WSACleanup;
   end;
end;

lo que me sucede es que cuando mido el consumo de memoria del servidor este aumenta considerablemente cuando el cliente usa esta función, no se si está quedando algún objeto por liberar en el algoritmo, pero no encuentro como bajar el consumo de memoria, o si existe otra manera de saber si está activo el servidor, na posibilidad sería hacer la conexión mediante el bloque try ... except, pero me gustaría poder depurar esta función que la uso en otras tareas y hacer que baje el consumo al comprobar la ip y puerto

Gracias e antemano a todos por las atenciones
Responder Con Cita
  #2  
Antiguo 19-10-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Por favor, no olvides poner títulos descriptivos de lo que preguntas, gracias
Responder Con Cita
  #3  
Antiguo 19-10-2014
cmfab cmfab is offline
Miembro
 
Registrado: jun 2010
Posts: 419
Poder: 14
cmfab Va por buen camino
Si tienes razón, gracias por el señalamiento, lo tendré mejor en consideración a futuro
Responder Con Cita
  #4  
Antiguo 19-10-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Gracias por tu comprensión

En relación a tu pregunta, ¿has hecho una búsqueda en los foros por "datasnap"?
Responder Con Cita
  #5  
Antiguo 19-10-2014
cmfab cmfab is offline
Miembro
 
Registrado: jun 2010
Posts: 419
Poder: 14
cmfab Va por buen camino
En realidad la hice, pero no encontré nada similar, y como esta función la necesito usar en otras tareas, decidí exponerla a ver si es que hay algo en ella que satura el servidor. Gracias
Responder Con Cita
  #6  
Antiguo 20-10-2014
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.732
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Yo no se mucho de Sockets, pero quizás debas desconectar el Socket después de comprobar que puedes conectar.
Código Delphi [-]
  try
   client.sin_family := AF_INET; //Establece el protocolo a usar en este caso (IPv4)
   client.sin_port := htons(dwPort);
   client.sin_addr.s_addr := inet_addr(PAnsiChar(ipAddressStr));
   sock :=socket(AF_INET, SOCK_STREAM, 0); //crea un socket
   Result:=connect(sock,client,SizeOf(client))=0; //Estable conexión con un socket

   // Quizás falta algo como esto ????
   Disconnect(sock, ...);
   // ????

   finally
     WSACleanup;
   end;
Responder Con Cita
  #7  
Antiguo 20-10-2014
cmfab cmfab is offline
Miembro
 
Registrado: jun 2010
Posts: 419
Poder: 14
cmfab Va por buen camino
Gracias podría ser una variante, pero como reviso todos los parámetros de la función Disconect ?
Responder Con Cita
  #8  
Antiguo 20-10-2014
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.732
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Puedes ver esta conversación.
Por un lado dicen que WSACleanup cierra todos las conexiónes, pero que también puedes hacer
Código Delphi [-]
CloseSocket(sock);
Allí proponen también otra solución para comprobar si un puerto está abierto.
Código Delphi [-]
function TForm7.PortIsOpen(const APort: Integer; const AAddress: string):
    Boolean;
var
  LTcpClient: TIdTCPClient;
begin
  LTcpClient := TIdTCPClient.Create(nil);
  try
    try
      LTcpClient.Host := AAddress;      //which server to test
      LTcpClient.Port := APort;         //which port to test
      LTcpClient.ConnectTimeout := 200; //assume a port to be closed if it does not respond within 200ms (some ports will immediately reject, others are using a "stealth" mechnism)
      LTcpClient.Connect;               //try to connect
      result := true;                   //port is open
    except
      result := false;
    end;
  finally
    freeAndNil(LTcpClient);
  end;
end;
 
procedure TForm7.Button1Click(Sender: TObject);
begin
  if PortIsOpen(1234, '127.0.0.1') then
    ShowMessage('OPEN')
  else
    ShowMessage('NOT OPEN');
end;
Responder Con Cita
  #9  
Antiguo 20-10-2014
cmfab cmfab is offline
Miembro
 
Registrado: jun 2010
Posts: 419
Poder: 14
cmfab Va por buen camino
Muchas gracias, espero poder resolver con esos ejemplos
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Servidor y cliente DataSnap cmfab Varios 9 11-09-2014 16:03:27
Servidor DataSnap Existente muli Providers 4 04-07-2014 03:29:43
Ejemplo de un Cliente/Servidor Datasnap? kaiserilich Conexión con bases de datos 2 30-06-2014 17:21:49
exportar servidor datasnap JULIPO Providers 0 28-02-2012 05:34:07
DataSnap residente en el servidor !!! Velia Providers 0 18-05-2006 16:06:25


La franja horaria es GMT +2. Ahora son las 14:56:46.


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
Copyright 1996-2007 Club Delphi