Ver Mensaje Individual
  #7  
Antiguo 19-07-2010
Avatar de sintecsl
sintecsl sintecsl is offline
Miembro
 
Registrado: jun 2008
Ubicación: Barcelona - Spain
Posts: 40
Reputación: 0
sintecsl Va por buen camino
Password y encriptación

Por internet ya existe muchos ejemplo prácticos e ilustrativos. Busca en google entrelazando las dos palabras y delphi y seguro que encuentras miles de enlaces en tu idioma.

Por otro lado si dominas lo indy u otro VCL, pues es fácil. Existe la instrucción OnConnect en el IdServer, yo tengo esto :
Código Delphi [-]
procedure TServerForm.ServerConnect(AThread: TIdPeerThread);
Var
   Name,
   Pass : String;
begin
     //Cuando se conecta un cliente se notifica
     Memo1.Lines.Add('Conectado : '
                     +' <- IP:Puerto : '+AThread.Connection.Socket.Binding.PeerIP
                     +':'+IntToStr(AThread.Connection.Socket.Binding.PeerPort));
     //Leemos nombre del conectado
     Name:=AThread.Connection.ReadLn();
     //Leemos el password (Clave) de la red de conexión
     Pass:=AThread.Connection.ReadLn();
     If Not (Pass=Usuario.Passw) Then
       Begin
            AThread.Connection.Socket.Close;
            Memo1.Lines.Add('Usuario o intruso rechazado')
       End
     Else Memo1.Lines.Add('Usuario '+Name+' identificado correctamente')
end;
A parte de esto determino el tamaño de buffer etc, para optimizar los envíos y recepciones.

Te pongo lo que tengo en el IdCliente al intentar conectar. Piensa que hay muchas llamadas a otros procedimientos que no bienen al caso.
Código Delphi [-]
procedure TClienteForm.ConectarClick(Sender: TObject);
Var
   Sl : TStringList;
   IP, Puerto : String;
begin
     If EnEjecucion Then Exit; //Para no solapar los procesos
     EnEjecucion:=True; //Prevenimos rellamadas
     try
     If Cliente.Connected Then
       Begin
            StatusServer.Panels.Items[0].Text:='Desconectando';
            Cliente.Disconnect;
            Conectar.Checked:=False;
            StatusServer.Panels.Items[0].Text:='Desconectado';
            //Vaciamos listas server
            DirsServer.Items.Clear;
            FilesServer.Items.Clear;
            EnEjecucion:=False;
            Exit //Salimos
       End;
     //Buscamos la IP del servidor actualizada
      StatusServer.Panels.Items[0].Text:='Conectando ...';
      Sl:=TStringList.Create;
      Sl.Text:=Servidores.Text;
      Sl.Text:=AnsiReplaceText(Sl.Text,'#',#13);
      If (Sl.Text='')Or(Sl.Count<3) Then
       Begin //No hay servidor
            MensageError('No hay servidor registrado');
            Sl.Free;
            StatusServer.Panels.Items[0].Text:='Desconectado';
            EnEjecucion:=False;
            Exit //Salimos
       End;
      IP:=SL.Strings[1]; //2ª línea es el IP
      Puerto:=SL.Strings[2]; //3ª línea es el Port de acceso al server
      SL.Free;
      Cliente.Disconnect; //Por si acaso
      Cliente.Host:=IP;
      Cliente.Port:=StrToInt(Puerto);
      Try
      Cliente.Connect;
      Except   //Silenciamos el mensaje de error
        If Not Cliente.Connected Then
          Begin
               StatusServer.Panels.Items[1].Text:='ERROR AL CONECTAR CON EL SERVER';
               Exit //Obliga a que salte al Finally
          End
      End;
     If Cliente.Connected Then
       Begin
            //Nos identificaremos con el nombre de usuario y el password
            //ya que lo está esperando el server
            Cliente.WriteLn(Usuario.Name);
            Cliente.WriteLn(Usuario.Passw); //IMPORTANTE SI NO COINCIDEN ERROR
            If Cliente.Connected Then //No rechazó la conexión
              Begin
                  TamPaqueteChange(Self);
                  Cliente.WriteLn('DAMEDISCOSACTIVOS');
                  Sl:=TStringList.Create;
                  Cliente.ReadStrings(Sl);
                  //Añadimos unidades y dirs favoritos del server
                  UnidadesServer.Items.Text:=Sl.Text+
                        ConfigCliente.ListaDirsServer.Items.Text;;
                  Sl.Free;
                  UnidadesServer.ItemIndex:=0;
                  //si no hay un dir de arranque preferido
                  //comenzamos por la 1ª unidad
                  If ConfigCliente.Memo1.Lines.Text='' Then
                     DirRootServer:=UnidadesServer.Text
                  Else DirRootServer:=ConfigCliente.Memo1.Lines.Strings[0];
              End
       End;
     finally
     Conectar.Checked:=Cliente.Connected; //Se verifica si realmente conectó
     If Cliente.Connected Then
        StatusServer.Panels.Items[0].Text:='Conectado'
     Else StatusServer.Panels.Items[0].Text:='Desconectado';
     EnEjecucion:=False;
     End
end;
En negrita te dejo lo que te interesa.
__________________
www.sintecsl.es

Última edición por nlsgarcia fecha: 15-07-2015 a las 23:21:40. Razón: Sintaxis Delphi
Responder Con Cita