Invia la funzione 2 C

Invia la funzione 2 C
“Per inviare un messaggio da una presa a un altro canale, possiamo utilizzare le funzioni System Send (), SendTo () e SendMSG () della lingua C nel sistema Kali Linux. Possiamo invocare la funzione Send () quando la presa è connessa (in modo che il destinatario previsto sia noto). L'esistenza di bandiere è l'unico differenziatore tra le funzioni Send () e Write (2). La funzione Send () è equivalente a scrivere (2) con un parametro FLAGS di zero. Inoltre, la prossima chiamata è equivalente a WQ1 Send (Socket_file_Descriptor, buffer, lunghezza, flag);
SENDTO (Socket_file_Descriptor, buffer, lunghezza, flags, null, 0);

Il descrittore di file di invio del socket è contenuto nell'argomento socket_file_descriptor. Il messaggio si trova in un buffer e ha una lunghezza di lunghezza per Send () e SendTo (). Abbiamo bisogno di un server e dei terminali client per comprendere praticamente la funzionalità della funzione Send (). A tale scopo, dobbiamo scrivere il codice per il server e il client. Utilizzando l'editor VIM, crea un server.C file di programmazione. Questo è il comando per aprire un file di codifica in vim editor."

Dopo aver incluso i file di intestazione necessari nelle prime cinque righe del server.C file, definiamo una variabile porta e impostiamo il suo valore su 8000. Dopo il lancio della funzione principale, dichiariamo tre variabili di tipo intero chiamate server fd (descrittore di file server), un nuovo socket e un messaggio letto nella prima riga. Dichiarare la variabile dell'indirizzo del tipo Sockaddr dopo.

Successivamente, definiamo il valore di un'opzione variabile come 1. Utilizzo della funzione size_of, che è uguale all'indirizzo, definisce la variabile di lunghezza dell'indirizzo. Impostare la dimensione del tampone variabile dell'array di caray su 1024 e definire i valori su 0. Viene quindi definito un messaggio variabile di tipo carattere e dato il valore di “Ciao, sono il server. Come posso aiutarla?". I tipi di indirizzi con cui la presa può comunicare sono designati dalla famiglia AF_inet degli indirizzi (in questo caso, Internet Protocol V4 indirizzi).

In un'istruzione condizionale, assegnare il descrittore dei file del server e verificare se l'assegnazione provoca un errore. Se fallisce, mostra il messaggio di errore "Socket non riuscito" e lascia la funzione principale. Utilizzando la funzione setsockopt (), un programma applicativo può gestire il comportamento di una presa. Poiché la porta 8080 non è disponibile, stiamo collegando forzatamente la presa alla porta 8000 in questa espressione condizionale. Legiamo intenzionalmente il socket del server alla porta 8080 nella seconda linea condizionale. Se il processo di vincolo non è andato come previsto, utilizzare il metodo Perror per visualizzare un messaggio di errore e la funzione di uscita per lasciare la funzione principale. Verifica se il server sta ascoltando la richiesta del client nella terza espressione condizionale.

Accettiamo la connessione del server e impostiamo il nuovo valore socket nella quarta istruzione condizionale, indicando che il server sta ricevendo la richiesta client. Il messaggio inviato dal client utilizzando il socket e il buffer devono ora essere letti. Il messaggio client verrà quindi visualizzato nella schermata del terminale e inviato al client indicato all'inizio della funzione principale. Chiudi il socket e spegnere il canale utilizzando il meccanismo di spegnimento dopo che una comunicazione riuscita ha avuto luogo mentre si passa il descrittore dei file del server e chiudersi il comando RDWR.

Chiudi l'editor VIM e compila il codice utilizzando il compilatore GCC. Salva il file output o oggetto nel file del server:

Ora è il momento di testare se il codice del server è in esecuzione o meno dopo aver completato la compilation. Usa il./script server all'interno del terminale e la chiave di inserisci per farlo. Quando il cursore lampeggia, il server è attivo e in attesa di una richiesta dal client:

Ora dobbiamo scrivere il codice client utilizzando l'editor VIM e salvarlo nel client.file c.

Il codice per il client viene visualizzato sullo schermo in basso. Include i file di intestazione nelle prime righe e imposta la porta utilizzata per la comunicazione tra server e client su 8000. Crea tre variabili di tipo intero e imposta il valore delle calze su 0 all'interno della funzione principale. Quindi, crea una variabile con il Sockaddr nel tipo. Imposta una variabile del messaggio con il valore "Saluti dal client!"E salvalo.

Ora usa un'istruzione condizionale per creare il socket e salvare il valore nella variabile socket. Gli indirizzi IPv4 o IPv6 vengono quindi convertiti da testo in binario. Utilizziamo l'impostazione predefinita del server 127.0.0.1 indirizzo IP. Impieghiamo la funzione Inet_pton per questo motivo. Successivamente, creiamo il codice per utilizzare la funzione Connect per connettersi al socket e definire il descrittore dei file client. L'indirizzo del server è stato fornito ad esso. Ora siamo pronti a utilizzare la funzione di invio per consegnare il messaggio al server.

La presa, il messaggio, la lunghezza del messaggio e il flag-che sono impostati su 0-sono tutti inclusi nel metodo di invio. Visualizza il terminale sul client quando il messaggio è stato inviato. Quindi leggi la risposta del server e visualizzala sullo schermo. Chiudi il descrittore di file dopo una comunicazione riuscita.

Ora compila il codice come indicato nello snippet seguente.

È necessario tenere presente che è necessario eseguire il server prima di eseguire il client perché se il server non risponde, il client non si connette e un messaggio di errore verrà visualizzato sullo schermo. In caso di guasto alla comunicazione, questo è l'output.

Ecco lo screenshot della comunicazione di successo sul lato server:

Sul lato del cliente:

Conclusione

All'interno di questo articolo, abbiamo dimostrato l'uso della funzione Send () di C nel programma Kali Linux. Sii consapevole del fatto che non possiamo interagire sullo stesso terminale, quindi dobbiamo aprirci due, uno per il server e un altro per il client. Questo esempio può essere regolato secondo le esigenze dell'utente.