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. |