Come scambiare dati su una rete usando Delphi

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

Winsock e Delphi Socket Components

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 richiesti per accedere ai servizi di rete di qualsiasi stack di protocollo. Winsock funge da collegamento tra le applicazioni di rete e gli stack di protocollo sottostanti.

I componenti socket Delphi (wrapper per Winsock) semplificano la creazione di applicazioni che comunicano con altri sistemi tramite TCP / IP e relativi protocolli. 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 di Delphi ospita il

instagram viewer
TServerSocket e TClientSocket componenti e TcpClient, tcpserver, e TUdpSocket.

Per avviare una connessione socket utilizzando un componente socket, è necessario specificare un host e una porta. In generale, ospite 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. Nel Evento OnCreate per il modulo, aggiungi il codice seguente:

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

Il OnClose l'evento dovrebbe contenere:

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

Dalla parte del cliente:

Per l'applicazione client, aggiungere un componente TClientSocket, TEdit e TButton a un modulo. Inserisci il seguente codice per il client:

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

Il codice praticamente descrive 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 al server per "vedere" i dati che il client sta inviando. L'evento a cui siamo interessati è OnClientRead: si verifica quando il socket del server deve leggere le informazioni da un socket client.

procedura TForm1.ServerSocket1ClientRead (Mittente: TObject;
Presa: TCustomWinSocket);
inizio
Memo1.Lines. Aggiungi (socket. ReceiveText);
fine;

Quando più di un client invia dati al server, è necessario un po 'più di codice:

procedura TForm1.ServerSocket1ClientRead (Mittente: TObject;
Presa: TCustomWinSocket);
var
i: numero intero;
SREC: corda;
beginfor i: = 0 per ServerSocket1.Socket. ActiveConnections-1 dobeginwith ServerSocket1.Socket. Connessioni [i] dobegin
sRec: = ReceiveText;
Se sRecr '' thenbegin
Memo1.Lines. Aggiungi (RemoteAddress + 'invia:');
Memo1.Lines. Aggiungi (sRecr);
fine;
fine;
fine;
fine;

Quando il server legge informazioni da un socket client, aggiunge quel testo al componente Memo; vengono aggiunti sia il testo che il RemoteAddress client, quindi saprai quale client ha inviato le informazioni. In implementazioni più sofisticate, gli alias per indirizzi IP noti possono servire come sostituti.

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

instagram story viewer