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
Memo1.Lines.Add('Conectado : '
+' <- IP:Puerto : '+AThread.Connection.Socket.Binding.PeerIP
+':'+IntToStr(AThread.Connection.Socket.Binding.PeerPort));
Name:=AThread.Connection.ReadLn();
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; EnEjecucion:=True; try
If Cliente.Connected Then
Begin
StatusServer.Panels.Items[0].Text:='Desconectando';
Cliente.Disconnect;
Conectar.Checked:=False;
StatusServer.Panels.Items[0].Text:='Desconectado';
DirsServer.Items.Clear;
FilesServer.Items.Clear;
EnEjecucion:=False;
Exit End;
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 MensageError('No hay servidor registrado');
Sl.Free;
StatusServer.Panels.Items[0].Text:='Desconectado';
EnEjecucion:=False;
Exit End;
IP:=SL.Strings[1]; Puerto:=SL.Strings[2]; SL.Free;
Cliente.Disconnect; Cliente.Host:=IP;
Cliente.Port:=StrToInt(Puerto);
Try
Cliente.Connect;
Except If Not Cliente.Connected Then
Begin
StatusServer.Panels.Items[1].Text:='ERROR AL CONECTAR CON EL SERVER';
Exit End
End;
If Cliente.Connected Then
Begin
Cliente.WriteLn(Usuario.Name);
Cliente.WriteLn(Usuario.Passw); If Cliente.Connected Then Begin
TamPaqueteChange(Self);
Cliente.WriteLn('DAMEDISCOSACTIVOS');
Sl:=TStringList.Create;
Cliente.ReadStrings(Sl);
UnidadesServer.Items.Text:=Sl.Text+
ConfigCliente.ListaDirsServer.Items.Text;;
Sl.Free;
UnidadesServer.ItemIndex:=0;
If ConfigCliente.Memo1.Lines.Text='' Then
DirRootServer:=UnidadesServer.Text
Else DirRootServer:=ConfigCliente.Memo1.Lines.Strings[0];
End
End;
finally
Conectar.Checked:=Cliente.Connected; 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.