quinta-feira, 24 de julho de 2014

Sockets em Delphi

Eai Rapaziada eu tava fora de cena hehe, mais agora vou começa a posta coisa sobre delphi, por isso criei esse blog novo! vou ta postando aqui como e feita a conexão entre socket. Client e Servidor!

Servidor


Para programar um servidor com sockets em Delphi, crie uma nova aplicação e inclua um componente SERVERSOCKET que está na palheta INTERNET. Configure a porta de comunicação (PORT) e defina ACTIVE como true.
Para fazer o envio de uma mensagem utilize:
ServerSocket1.Socket.Connections[0].SendText( texto a ser enviado );
Para receber uma mensagem utilize o evento onClientRead



Cliente

Para programar um cliente com sockets em Delphi, crie uma nova aplicação e inclua um componente CLIENTSOCKET que está na palheta INTERNET. Configure o servidor através do endereço (ADDRESS) ou o nome do servidor (HOST), a porta de comunicação (PORT) e defina ACTIVE como true.
Para fazer o envio de uma mensagem utilize:
ClientSocket1.Socket.SendText( texto a ser enviado );
Para receber uma mensagem utilize o evento onClientRead

Propriedades do ServerSocket:

Port = 3100
ServerType = stNonBlocking
Active = True

unit UnServidor;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ScktComp, StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Edit1: TEdit;
    Button1: TButton;
    ServerSocket1: TServerSocket;
    procedure ServerSocket1ClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure Button1Click(Sender: TObject);
    procedure ServerSocket1ClientConnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  meunro, nrorec: integer;

implementation

{$R *.DFM}

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
begin
nrorec:= strtointdef(Socket.ReceiveText,0);
if meunro > 0 then
    begin
    if (nrorec + meunro) mod 2 = 0 then
        begin
        showmessage('Seu Nro: ' + inttostr(meunro) + '   Nro Recebido: '+ inttostr(nrorec) + '  VOCÊ GANHOU!');
        end
    else
        begin
        showmessage('Seu Nro: ' + inttostr(meunro) + '   Nro Recebido: '+ inttostr(nrorec) + '  VOCÊ PERDEU!');
        end;
    nrorec:=0;
    meunro:=0;
    end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
meunro:=strtointdef(Edit1.text,0);
ServerSocket1.Socket.Connections[0].SendText(Edit1.text);
if nrorec>0 then
    begin
    if (nrorec + meunro) mod 2 = 0 then
        begin
        showmessage('Seu Nro: ' + inttostr(meunro) + '   Nro Recebido: '+ inttostr(nrorec) + '  VOCÊ GANHOU!');
        end
    else
        begin
        showmessage('Seu Nro: ' + inttostr(meunro) + '   Nro Recebido: '+ inttostr(nrorec) + '  VOCÊ PERDEU!');
        end;
    nrorec:=0;
    meunro:=0;
    end;
end;

procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
showmessage('Cliente conectou!');
Button1.Enabled:=true;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Button1.Enabled:=false;
end;

end.

unit UnCliente;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ScktComp;

type
  TForm1 = class(TForm)
    ClientSocket1: TClientSocket;
    Label1: TLabel;
    Label2: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    Button2: TButton;
    Label3: TLabel;
    Edit3: TEdit;
    Label4: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
    procedure Button2Click(Sender: TObject);
    procedure ClientSocket1Connect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  meunro, nrorec: integer;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
ClientSocket1.Host:=edit1.text;
ClientSocket1.port:=strtointdef(edit2.text,0);
ClientSocket1.Active:=true;
Button2.Enabled:=true;
end;

 
 
 
 
procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
begin
nrorec:= strtointdef(Socket.ReceiveText,0);
if meunro > 0 then
    begin
    if (nrorec + meunro) mod 2 <> 0 then
        begin
        showmessage('Seu Nro: ' + inttostr(meunro) + '   Nro Recebido: '+ inttostr(nrorec) + '  VOCÊ GANHOU!');
        end
    else
        begin
        showmessage('Seu Nro: ' + inttostr(meunro) + '   Nro Recebido: '+ inttostr(nrorec) + '  VOCÊ PERDEU!');
        end;
    nrorec:=0;
    meunro:=0;
    end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
meunro:=strtointdef(Edit3.text,0);
ClientSocket1.Socket.SendText(Edit3.text);
if nrorec>0 then
    begin
    if (nrorec + meunro) mod 2 <> 0 then
        begin
        showmessage('Seu Nro: ' + inttostr(meunro) + '   Nro Recebido: '+ inttostr(nrorec) + '  VOCÊ GANHOU!');
        end
    else
        begin
        showmessage('Seu Nro: ' + inttostr(meunro) + '   Nro Recebido: '+ inttostr(nrorec) + '  VOCÊ PERDEU!');
        end;
    nrorec:=0;
    meunro:=0;
    end;
end;

procedure TForm1.ClientSocket1Connect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
showmessage('Conectado!');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
button2.Enabled:=false;
end;

end.
Poste retirado do Blog: http://blogprogramadores.blogspot.com.br/2010/07/sockets-em-delphi.html

Postagens Relacionadas:

  • Criar form sem título que possa ser arrastadoProblema: Fazer um relógio num form é fácil. Porém gostaria que esse form não possuísse a barra de título, mas que o usuário ainda pudesse arrastá-lo com o mouse. Isto é possível no Delphi? Solução: Sim, é possível e é fá… Read More
  • Forçar foco em janelaAs funções abaixo forçam para que a janela informada fique em primeiro plano. Primeira alternativa function ForceForegroundWindow(hwnd: THandle): Boolean; const SPI_GETFOREGROUNDLOCKTIMEOUT = $2000; SPI_SETFOREGROUNDL… Read More
  • Anexar dois formsÉ comum encontrarmos aplicativos que possuem dois ou mais formulários que se mantém o tempo todo "colados" um ao outro. É o caso, por exemplo, do conhecido Winamp. Como fazer isto em aplicações Delphi? Vamos aos passos: 1. … Read More
  • Impedir que o form seja arrastado para fora das margens da tela- Na seção Private declare a procedure abaixo: private procedure WMMove(var Msg: TWMMove); message WM_MOVE; - Abaixo da palavra implementation escreva a procedure abaixo: procedure TForm1.WMMove(var Msg: TWMMove); beg… Read More
  • Impedir que o form seja fechado com Alt+F4Este é um problema fácil de resolver. Vejamos porque. Toda vez que um form recebe um comando para ser fechado, tal como Form1.Close ou mesmo uma mensagem WM_CLOSE, o evento OnCloseQuery é disparado. Este evento passa um par… Read More
← Postagem mais recente Página inicial

0 comentários:

Postar um comentário