// Projeto: Exemplo de Cliente Socket para simular um Gerenciador de Banco de Dados

// Descrição: O Cliente envia uma solicitação para o Servidor, que pode ser

//          : de listar, incluir o excluir strings em uma lista

// Desenvolvedor: Alberto Henrique Sousa

// Faculdade: Facthus - Talentos Humanos

// Curso: Sistemas de Informação

// Disciplinas: Redes de Computadores II

// Professor: Diovani Milhorim

// Data: 23/08/2007

 

unit PrincClient;

 

interface

 

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, ScktComp, StdCtrls, ExtCtrls;

 

type

  TFormPrincipal = class(TForm)

    ClientSocket1: TClientSocket;  // Componente Cliente Socket

    Panel1: TPanel;

    Label1: TLabel;

    Label2: TLabel;

    Edit1: TEdit;

    Edit2: TEdit;

    Button1: TButton;

    Panel2: TPanel;

    Label3: TLabel;

    EdComando: TEdit;

    Panel3: TPanel;

    Button2: TButton;

    Log: TMemo;

    GroupBox1: TGroupBox;

    Label4: TLabel;

    Label5: TLabel;

    Label6: TLabel;

    Label7: TLabel;

    Label8: TLabel;

    Label9: TLabel;

    procedure Button1Click(Sender: TObject);

    procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);

    procedure Button2Click(Sender: TObject);

    procedure FormShow(Sender: TObject);

    procedure Panel2Resize(Sender: TObject);

    procedure ClientSocket1Connect(Sender: TObject;

      Socket: TCustomWinSocket);

    procedure ClientSocket1Disconnect(Sender: TObject;

      Socket: TCustomWinSocket);

    procedure FormCreate(Sender: TObject);

  private

    { Private declarations }

    Connected: Boolean;

    procedure Status;

    procedure MsgLog(S: String);

  public

    { Public declarations }

  end;

 

var

  FormPrincipal: TFormPrincipal;

 

implementation

 

{$R *.dfm}

 

procedure TFormPrincipal.Button1Click(Sender: TObject);

begin

  if not Connected then

  begin

    ClientSocket1.Host := Edit1.text;    // Define o Host de conexão

    ClientSocket1.port := StrToIntdef(Edit2.text, 0); // Define a porta de conexão

  end;

  ClientSocket1.Active := not Connected;

  Status;

end;

 

procedure TFormPrincipal.ClientSocket1Read(Sender: TObject;

  Socket: TCustomWinSocket);

begin

  // O Método "ClientRead" faz a leitura da mensagem enviada pelo servidor através

  // da propriedade "ReceiveText" do componente "TCustomWinSocket".

  MsgLog('Resposta: ' + Socket.ReceiveText);

end;

 

procedure TFormPrincipal.Button2Click(Sender: TObject);

begin

  if Trim(EdComando.Text) <> '' then

    ClientSocket1.Socket.SendText(EdComando.text); // Envia a mensagem para o servidor

end;                                               // a mensagem será interpretada pelo servidor

 

procedure TFormPrincipal.Status;

begin

  if Connected then  // Status do Servidor

  begin

    Button1.Caption := 'Stop';

    MsgLog('Servidor Conectado...');

  end

  else

  begin

    Button1.Caption := 'Start';

    MsgLog('Servidor Desconectado...');

  end;

end;

 

procedure TFormPrincipal.MsgLog(S: String);

begin

  Log.Lines.Add(S);

  Application.ProcessMessages;

end;

 

procedure TFormPrincipal.FormShow(Sender: TObject);

begin

  Button1Click(Self);

end;

 

procedure TFormPrincipal.Panel2Resize(Sender: TObject);

begin

  EdComando.Width := Panel2.Width - 142;

end;

 

procedure TFormPrincipal.ClientSocket1Connect(Sender: TObject;

  Socket: TCustomWinSocket);

begin

  Connected := True;

  Button2.Enabled := True;

  Status;

end;

 

procedure TFormPrincipal.ClientSocket1Disconnect(Sender: TObject;

  Socket: TCustomWinSocket);

begin

  Connected := False;

  Button2.Enabled := False;

  Status;

end;

 

procedure TFormPrincipal.FormCreate(Sender: TObject);

begin

  Connected := False;

end;

 

end.