All'interno della programmazione socket, dobbiamo avere due nodi, i.e., client e un server. Un endpoint per la trasmissione è noto come un socket Posix o solo una presa. Per il mittente e il ricevitore, A e B, per interagire tra loro, entrambi questi lati devono prima creare un collegamento attraverso i loro endpoint particolari. Un altro socket (endpoint) cerca il primo socket per generare un collegamento, mentre il primo socket risponde su una determinata porta su un indirizzo IP. Mentre il client si avvicina al server, il server genera la presa ascoltatore. In questa guida, spiegheremo l'uso della funzione socket dalla libreria Posix di C durante l'utilizzo di Ubuntu 20.04 Sistema operativo Linux.
Lato server:
Scrivere il codice client e server è necessario per la programmazione di socket. Un singolo nodo o server può avere più client collegati ad esso. I file di intestazione necessari da utilizzare durante la programmazione sono inclusi nelle prime otto righe. Impostando il valore su 8080, definiamo la variabile Global Port. Se la porta 8080 non è disponibile, possiamo scambiarlo a qualsiasi altra porta che è.
Dichiariamo alcune variabili di tipo intero nel metodo principale che useremo più tardi. Queste variabili includono quelle per il descrittore dei file server (server_file_desc), il nuovo socket (new_socket) e il valore o il messaggio letto dal client (value_read). Gli indirizzi per la famiglia di indirizzi Internet sono archiviati in una struttura di tipo Sockaddr, che viene dichiarato nella linea dopo.
Successivamente, abbiamo definito l'opzione = 1, la lunghezza dell'indirizzo = sizeof (socket_address) e buffer [1024], che inizialmente sono stati impostati su 0 e sono stati utilizzati per i messaggi recuperati da clienti di una dimensione di 1024 byte. La variabile del messaggio, che memorizza il messaggio inviato dal server ai client collegati ad esso, viene successivamente. Nella riga successiva, stiamo creando un socket e la passiamo af_inet (la famiglia degli indirizzi nota come AF Inet viene utilizzata per specificare i tipi di indirizzi con cui la tua presa può connettersi (in questo caso, IP (protocollo Internet) V4/V6 ).
TCP è un protocollo di comunicazione di trasmissione che è un protocollo basato sulla connessione. Una volta stabilita la connessione tra due parti (server client), la comunicazione inizia fino a quando la connessione non viene terminata o abortita da una delle due parti o da un tipo di errore di connessione di rete. Ecco lo scatto del codice lato server scritto nel server.file c.
Ora stiamo collegando con forza la presa alla porta 8080. Successivamente, inizializziamo la famiglia, l'indirizzo e il porto socket. Successivamente, vinciamo l'indirizzo socket alla porta 8080. Ora il server è pronto per ascoltare qualsiasi connessione dal client. Quindi stampiamo un messaggio prima del metodo di ascolto. Quando qualsiasi client si collega al server utilizzando questa porta, il server accetterà la connessione client.
Se il client e il server sono connessi, il server leggerà il messaggio dal client utilizzando un buffer e lo visualizzerà sullo schermo del terminale. Simile per quanto i clienti ricevano messaggi dai server, inviano metodi per trasmettere un messaggio e informazioni socket ai client. Il server visualizza quindi un messaggio di successo prima di tagliare la comunicazione con la presa associata. Il server ha anche chiuso la porta di ascolto sul server.
Dalla parte del cliente:
L'immagine seguente mostra il client.c snippet del codice file:
Il client si collega al server utilizzando un socket utilizzando il metodo Connect () e abbiamo anche superato l'indirizzo del server. Il client e il server possono comunicare una volta che la connessione è stata stabilita in modo efficace. Visualizza un messaggio di errore nella schermata del terminale se il server è inattivo o il client non è in grado di connettersi per nessun altro motivo. Seguendo una connessione riuscita, il client utilizzerà un socket per inviare un messaggio al server, leggi il messaggio dal server utilizzando un buffer nella variabile del valore di lettura e visualizza la risposta del server sullo schermo. Il client quindi spegne la comunicazione con la presa collegata.
Abbiamo compilato il server.C e cliente.C files utilizzando il compilatore GCC e abbiamo salvato i risultati nel server.C e cliente.Cartelle C. I comandi per compilare i file del server e del client sono elencati di seguito.
Avevamo bisogno di due terminali distinti, uno per il server e uno per il client, per vedere la comunicazione tra loro. Premere Ctrl+Shift+N per avviare un nuovo terminale in Ubuntu. Una cosa che devi tenere a mente è che il server deve essere attivo e in attesa di una connessione dal client. Riceverai l'errore "connessione con il server non riuscito" se il server è offline e non collegato per nessun motivo mentre il client desidera connettersi al server. Lo scatto seguente mostra questo errore:
Quando eseguiamo il file di output del server, il server attende che il client si connetta prima che i due possano comunicare. Semplicemente digita ./Server sul terminale appena aperto per avviare il server. Ecco uno screenshot che mostra che il server è attivo e in esecuzione e pronto ad accettare le connessioni dai client:
È ora di avviare il cliente adesso. Per avviare la comunicazione tra client e server, digita "/client" su un nuovo terminale. Il server quindi risponde e invia un messaggio, che il client legge, memorizza in una variabile del messaggio e visualizza l'istruzione printf. Il messaggio del client è stato visualizzato nella schermata del terminale in basso.
Quando un client si allega a un server, il server accetta un messaggio per verificare la connessione. Il messaggio del client è quindi mostrato sullo schermo seguente. Successivamente, il server avviserà il client e visualizzerà un messaggio di successo. A seguito di questa comunicazione riuscita, il server termina o aborta la connessione con il client.
Conclusione:
Abbiamo finito con abbastanza spiegazioni e dimostrazioni di programmazione socket sul lato client e sul lato server utilizzando la libreria POSIX della lingua C. Abbiamo spiegato brevemente entrambi i lati del codice della programmazione socket e speriamo che imparerai dagli esempi.