Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Ayuda con cliente/servidor (sockets) (https://www.clubdelphi.com/foros/showthread.php?t=61844)

vejerf 24-11-2008 18:45:27

Ayuda con cliente/servidor (sockets)
 
Muy buenas a todos,
Estoy intentando familiarizarme un poco con los componentes Indy TIdTCPClient y TIdTCPServer, pero necesito ayuda. Lo que intento es realizar un programita al que puedan conectarse uno o varios clientes. Estos clientes una vez conectados no realizan ninguna petición, sino que el servidor conforme va actualizando unos elementos, envía dicha actualización a los clientes. Esto es así de simple. Busco algo como:

Si Servidor.ContadorClientes > 0 entonces
for I:=0 to Servidor.ContadorClientes do
begin
Servidor.Cliente[i].EnviarDatos;
end;

Y por otra parte el cliente debería estar esperando los datos que le llegan por parte del servidor.
Datos := Cliente.LeerDatosServidor;
ActualizarDatos(Datos);

Espero haberme explicado... muchas gracias!!!

Neftali [Germán.Estévez] 25-11-2008 11:56:36

¿Has revisado los ejemplos que vienen con Delphi? ¿Exactamente qué necesitas? ¿Has probado algo? ¿No te funciona?

vejerf 25-11-2008 17:33:34

Hola Neftali,
Hace un tiempo me hice un ejemplito con sockets, pero ya no me acuerdo bien de como lo hice. Por otra parte no encuentro los ejemplos que me comentas (uso BDS2006).
Para empezar simplemente estoy creando una conexion e intento enviar datos del servidor al cliente, pero no lo consigo. La conexión sí que se realiza, pero después no sé por qué no consigo leer los datos que supuestamente estoy enviando al cliente. Me podrías poner un ejemplito simplemente con la lectura/escritura de un cliente/servidor??? De ahí podría partir bien creo
Gracias!!!

Neftali [Germán.Estévez] 25-11-2008 18:14:35

A ver, he buscado el primer ejemplillo que tenía a mano y en ese en concreto utilizo esta función:

Código Delphi [-]
//: Permite enviar un comando a un Socket.
function SendCommand(ASocket: TCustomWinSocket; ACommand:  TSocketCommand;
                     AParams: array of string):Boolean;
var
  Str, StrParams:String;
  i:Integer;
begin

  // Por defecto...
  Result := False;
  StrParams := '';

  // Está activo?
  if (ASocket.Connected) then begin

    Debug.LogSocket('Enviando comando: ' + SocketCommandToStr(ACommand));

    // Recorrido
    for i := Low(AParams) to High(AParams) do begin
      StrParams := StrParams + Aparams[i] + CHAR_MESSAGE_SEP;
      Debug.LogSocket('  ' + Aparams[i]);
    end;

    // enviar comando...
    Str := SocketCommandToStr(ACommand);
    // Añadir parametros
    Str := Str + StrParams;
    // enviar
    ASocket.SendText(Str);
    Result := True;
  end;
end;

A parte de las líneas de Debug (que es para una herramienta interna) y el SocketCommandToStr (que lo único que hace en convertir un enumerado en String), como ves básicamente lo que hago es usar:

ASocket.SendText(Str)

Delfino 16-12-2008 22:46:24

En este caso el cliente tiene q ser un TIdCmdTCPClient:
Código Delphi [-]
  var I: Integer;
      Clients: TList;
begin
 Clients := TCPServer.Contexts.LockList;
 try
 for i := 0 to Clients - 1 do
  TIdContext(Clients[i]).Connection.IOHandler.WriteLn(command);
 finally
  TCPServer.Contexts.UnlockList;
 end;
end;
En los clientes haces uso del evento OnCommand de cada commando creado para el TIdCmdTCPClient..

vejerf 29-01-2009 13:05:12

Hola, tras un tiempo estoy recuperando una cosilla que dejé planteada por motivos de trabajo. Ahora necesito recuperar esto. La cosa es que quiero comunicarme con un servidor (q tb estoy implementando) y que el servidor pueda enviar comandos al cliente tb. Para ello veo que se puede usar el componente TIdCmdTCPClient, pero no sé como usarlo. Alguien tiene un ejemplo simple de lectura de comandos por parte del cliente o sabe donde encontrarlo? He buscado ejemplos de las Indy, pero no teng de este componente.
Gracias!!!


La franja horaria es GMT +2. Ahora son las 20:22:09.

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