De todos os componentes que Delphi fornece suporte para aplicativos que trocam dados em uma rede (internet, intranet e local), dois dos mais comuns TServerSocket e TClientSocket, ambos projetados para oferecer suporte a funções de leitura e gravação em uma conexão TCP / IP.
Componentes do soquete Winsock e Delphi
O Windows Sockets (Winsock) fornece uma interface aberta para programação de rede no sistema operacional Windows. Ele oferece um conjunto de funções, estruturas de dados e parâmetros relacionados necessários para acessar os serviços de rede de qualquer pilha de protocolo. O Winsock atua como um link entre aplicativos de rede e pilhas de protocolos subjacentes.
Os componentes de soquete Delphi (wrappers para o Winsock) agilizam a criação de aplicativos que se comunicam com outros sistemas usando TCP / IP e protocolos relacionados. Com soquetes, você pode ler e escrever em conexões com outras máquinas sem se preocupar com os detalhes do software de rede subjacente.
A paleta da Internet na barra de ferramentas dos componentes Delphi hospeda o
TServerSocket e TClientSocket componentes, bem como TcpClient, TcpServer, e TUdpSocket.Para iniciar uma conexão de soquete usando um componente de soquete, você deve especificar um host e uma porta. Em geral, hospedeiro especifica um alias para o endereço IP do sistema do servidor; porta especifica o número de identificação que identifica a conexão do soquete do servidor.
Um programa simples de mão única para enviar texto
Para criar um exemplo simples usando os componentes de soquete fornecidos pelo Delphi, crie dois formulários - um para o servidor e outro para o computador cliente. A idéia é permitir que os clientes enviem alguns dados textuais para o servidor.
Para começar, abra o Delphi duas vezes, criando um projeto para o aplicativo do servidor e outro para o cliente.
Lado do servidor:
Em um formulário, insira um componente TServerSocket e um componente TMemo. No Evento OnCreate para o formulário, adicione o próximo código:
procedimento TForm1.FormCreate (Remetente: TObject);
início
ServerSocket1.Port: = 23;
ServerSocket1.Active: = True;
fim;
o OnClose O evento deve conter:
procedimento TForm1.FormClose
(Remetente: TObject; var Ação: TCloseAction);
início
ServerSocket1.Active: = false;
fim;
Lado do Cliente:
Para o aplicativo cliente, adicione um componente TClientSocket, TEdit e TButton a um formulário. Insira o seguinte código para o cliente:
procedimento TForm1.FormCreate (Remetente: TObject);
início
ClientSocket1.Port: = 23;
// endereço TCP / IP local do servidor
ClientSocket1.Host: = '192.168.167.12';
ClientSocket1.Active: = true;
fim;
procedimento TForm1.FormClose (Remetente: TObject; var Ação: TCloseAction);
início
ClientSocket1.Active: = false;
fim;
procedimento TForm1.Button1Click (Remetente: TObject);
beginif ClientSocket1.Active então
ClientSocket1.Socket. SendText (Edit1.Text);
fim;
O código praticamente se descreve: quando um cliente clica em um botão, o texto especificado dentro do componente Edit1 será enviado ao servidor com porta e endereço de host especificados.
De volta ao servidor:
O toque final nesta amostra é fornecer uma função para o servidor "ver" os dados que o cliente está enviando. O evento em que estamos interessados é OnClientRead - ocorre quando o soquete do servidor deve ler as informações de um soquete do cliente.
procedimento TForm1.ServerSocket1ClientRead (Remetente: TObject;
Soquete: TCustomWinSocket);
início
Memo1.Lines. Adicionar (soquete. ReceiveText);
fim;
Quando mais de um cliente envia dados para o servidor, você precisará de um pouco mais de código:
procedimento TForm1.ServerSocket1ClientRead (Remetente: TObject;
Soquete: TCustomWinSocket);
var
i: inteiro;
sRec: corda;
começar i: = 0 para ServerSocket1.Socket. ActiveConnections-1 dobeginwith ServerSocket1.Socket. Conexões [i] dobegin
sRec: = ReceiveText;
E se sRecr '' então comece
Memo1.Lines. Add (Endereço Remoto + 'envia:');
Memo1.Lines. Adicionar (sRecr);
fim;
fim;
fim;
fim;
Quando o servidor lê informações de um soquete de cliente, ele adiciona esse texto ao componente Memorando; o texto e o endereço remoto do cliente são adicionados, para que você saiba qual cliente enviou as informações. Em implementações mais sofisticadas, os aliases para endereços IP conhecidos podem servir como substitutos.
Para um projeto mais complexo que usa esses componentes, explore o Delphi> Demos> Internet> Chat projeto. É um aplicativo de bate-papo em rede simples que usa um formulário (projeto) para o servidor e o cliente.