Scrivi applicazioni compatibili con la rete con Delphi

Di tutti i componenti che Delphi fornisce per supportare applicazioni che scambiano dati su una rete (Internet, intranet e locale), due dei più comuni sono TServerSocket e TClientSocket, entrambi progettati per supportare funzioni di lettura e scrittura su TCP / Connessione IP.

Componenti Winsock e Delphi Socket

Windows Sockets (Winsock) fornisce un’interfaccia aperta per la programmazione di rete con il sistema operativo Windows. Offre una serie di funzioni, strutture dati e parametri correlati necessari per accedere ai servizi di rete di qualsiasi stack di protocollo. Winsock funge da collegamento tra le applicazioni di rete e gli stack di protocolli sottostanti.

I componenti socket Delphi (wrapper per Winsock) semplificano la creazione di applicazioni che comunicano con altri sistemi utilizzando TCP / IP e protocolli correlati. Con i socket, puoi leggere e scrivere su connessioni ad altre macchine senza preoccuparti dei dettagli del software di rete sottostante.

La tavolozza Internet sulla barra degli strumenti dei componenti Delphi ospita i componenti TServerSocket e TClientSocket oltre a TcpClient, TcpServer e TUdpSocket.

Per avviare una connessione socket utilizzando un componente socket, è necessario specificare un host e una porta. In generale, l’host specifica un alias per l’indirizzo IP del sistema server; porta specifica il numero ID che identifica la connessione socket del server.

Un semplice programma unidirezionale per inviare testo

Per creare un semplice esempio utilizzando i componenti socket forniti da Delphi, creare due moduli: uno per il server e uno per il computer client. L’idea è di consentire ai client di inviare alcuni dati testuali al server.

Per iniziare, apri Delphi due volte, creando un progetto per l’applicazione server e uno per il client.

Lato server:

In un modulo, inserire un componente TServerSocket e un componente TMemo. Nell’evento OnCreate per il modulo, aggiungi il codice successivo:

procedura TForm1.FormCreate (Sender: TObject);
iniziare
ServerSocket1.Port: = 23;
ServerSocket1.Active: = True;
fine;

L’evento OnClose dovrebbe contenere:

procedura TForm1.FormClose
(Mittente: TObject; var Azione: TCloseAction);
iniziare
ServerSocket1.Active: = false;
fine;

Dalla parte del cliente:

Per l’applicazione client, aggiungi un componente TClientSocket, TEdit e TButton a un form. Inserisci il seguente codice per il client:

procedura TForm1.FormCreate (Sender: TObject);
iniziare
ClientSocket1.Port: = 23;
// indirizzo TCP / IP locale del server
ClientSocket1.Host: = '192.168.167.12';
ClientSocket1.Active: = true;
fine;
procedura TForm1.FormClose (Sender: TObject; var Azione: TCloseAction);
iniziare
ClientSocket1.Active: = false;
fine;
procedura TForm1.Button1Click (Sender: TObject);
beginif ClientSocket1.Active poi
ClientSocket1.Socket.SendText (Edit1.Text);
fine;

Il codice descrive più o meno se stesso: quando un client fa clic su un pulsante, il testo specificato all’interno del componente Edit1 verrà inviato al server con la porta e l’indirizzo host specificati.

Torna al server:

Il tocco finale in questo esempio è fornire una funzione per il server per “vedere” i dati che il client sta inviando. L’evento che ci interessa è OnClientRead: si verifica quando il socket del server deve leggere le informazioni da un socket client.

procedura TForm1.ServerSocket1ClientRead (Sender: TObject;
Socket: TCustomWinSocket);
iniziare
Memo1.Lines.Add (Socket.ReceiveText);
fine;

Quando più di un client invia dati al server, avrai bisogno di un po ‘di più per il codice:

procedura TForm1.ServerSocket1ClientRead (Sender: TObject;
Socket: TCustomWinSocket);
var
i: intero;
sRec: stringa;
beginfor i: = 0 a ServerSocket1.Socket.ActiveConnections-1 dobeginwith ServerSocket1.Socket.Connections [i] dobegin
sRec: = ReceiveText;
if sRecr '' quindi iniziare
Memo1.Lines.Add (RemoteAddress + 'invia:');
Memo1.Lines.Add (sRecr);
fine;
fine;
fine;
fine;

Quando il server legge le informazioni da un socket client, aggiunge quel testo al componente Memo; vengono aggiunti sia il testo che il client RemoteAddress, così saprai quale client ha inviato le informazioni. Nelle implementazioni più sofisticate, gli alias per indirizzi IP noti possono fungere da sostituto.

Per un progetto più complesso che utilizza questi componenti, esplora il progetto Delphi> Demos> Internet> Chat. È una semplice applicazione di chat di rete che utilizza un modulo (progetto) sia per il server che per il client.