Adicionando/Removendo valores em conjunto

Top  Previous  Next

// depois de suar a camisa, estudar o exemplo do delphi e 

// ler um livro (Delphi APIS & Sockets) veja o exemplo simplificado

// de fazer um programa de chat simplérrimo para estudo (funcionou D6)

 

-------------------------------------------------------------------------------

DFM:

-------------------------------------------------------------------------------

object Form1: TForm1

  Left = 7

  Top = 306

  Width = 336

  Height = 239

  Caption = 'Form1'

  Color = clBtnFace

  Font.Charset = DEFAULT_CHARSET

  Font.Color = clWindowText

  Font.Height = -11

  Font.Name = 'MS Sans Serif'

  Font.Style = []

  OldCreateOrder = False

  OnClose = FormClose

  OnCreate = FormCreate

  PixelsPerInch = 96

  TextHeight = 13

  object Memo1: TMemo

    Left = 8

    Top = 8

    Width = 309

    Height = 89

    Lines.Strings = (

      'Memo1')

    TabOrder = 1

  end

  object Edit1: TEdit

    Left = 8

    Top = 144

    Width = 121

    Height = 21

    TabOrder = 2

    Text = 'Edit1'

  end

  object Button1: TButton

    Left = 132

    Top = 144

    Width = 75

    Height = 25

    Caption = 'SEND'

    TabOrder = 0

    OnClick = Button1Click

  end

  object Edit2: TEdit

    Left = 8

    Top = 116

    Width = 121

    Height = 21

    TabOrder = 3

    Text = '196.0.1.222'

  end

  object ClientSocket: TClientSocket

    Active = False

    ClientType = ctNonBlocking

    Port = 1024

    OnRead = ClientSocketRead

    OnError = ClientSocketError

    Left = 112

    Top = 36

  end

  object ServerSocket: TServerSocket

    Active = False

    Port = 1024

    ServerType = stNonBlocking

    OnClientConnect = ServerSocketClientConnect

    OnClientRead = ServerSocketClientRead

    Left = 228

    Top = 36

  end

end

 

-------------------------------------------------------------------------------

UNIT:

-------------------------------------------------------------------------------

unit Unit1;

 

interface

 

uses Forms, ScktComp, StdCtrls, Classes, Controls, ARotinasUnit, SysUtils;

 

type

  TForm1 = class(TForm)

    ClientSocket: TClientSocket;

    ServerSocket: TServerSocket;

    Memo1: TMemo;

    Edit1: TEdit;

    Button1: TButton;

    Edit2: TEdit;

    // client

    procedure ClientSocketError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer);

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

    // server

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

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

    // form

    procedure FormCreate(Sender: TObject);

    procedure FormClose(Sender: TObject; var Action: TCloseAction);

    // other

    procedure Button1Click(Sender: TObject);

  public

    Conectado: Boolean;

  end;

 

var

  Form1: TForm1;

 

implementation

 

{$R *.dfm}

 

// msg erro quando o client nao consegue conectar

procedure TForm1.ClientSocketError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer);

begin

  msgErro('Error connecting to : ' + Edit2.text);

  ErrorCode := 0;

end;

 

// se receber do server a msg "CONECTED" o client sabe que conectou!

procedure TForm1.ClientSocketRead(Sender: TObject; Socket: TCustomWinSocket);

begin

  Conectado := (Socket.ReceiveText = 'CONECTED!');

end;

 

// server: quando o server recebeu a conexao, manda para o cliente a msg "CONECTED!"

procedure TForm1.ServerSocketClientConnect(Sender: TObject; Socket: TCustomWinSocket);

begin

  Socket.SendText('CONECTED!');

end;

 

// quando o client manda msg para o server ele o coloca numa memo

procedure TForm1.ServerSocketClientRead(Sender: TObject; Socket: TCustomWinSocket);

begin

  Memo1.Lines.Add('client mandou: ' + Socket.ReceiveText);

end;

 

// ativa o server (deve ficar SEMPRE ativado durante o uso do programa)

procedure TForm1.FormCreate(Sender: TObject);

begin

  Conectado           := False;

  ServerSocket.Active := True;

end;

 

// desativa o client e o server

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

begin

  if ClientSocket.Active then ClientSocket.Active := False;

  ServerSocket.Active := False;

end;

 

procedure TForm1.Button1Click(Sender: TObject);

var

  Tempo: TDateTime;

begin

  // tenta conectar o cliente ao server

  if ClientSocket.Active then ClientSocket.Active := False;

  ClientSocket.Host   := Edit2.Text;

  ClientSocket.Active := True;

 

  // espera 3 segundos no máximo pela resposta do server que está conectado

  Tempo := Time;

  while (not Conectado) and ((Time - Tempo) <= StrToTime('00:00:03')) do

    Application.ProcessMessages;

 

  // se estiver conectado envia a msg ao server juntamente com a hora local

  if Conectado then

    ClientSocket.Socket.SendText(Edit1.Text + #32 + TimeToStr(Time));

 

  Conectado := False;

end;

 

end.