Nel mondo di oggi, le reti di computer svolgono un ruolo importante nel campo del trasferimento dei dati. È un argomento che ogni programmatore dovrebbe conoscere. Nella rete di computer, la programmazione dei socket è uno degli argomenti più importanti nel mondo della programmazione. In questo argomento discuteremo della programmazione socket e del diverso metodo di programmazione socket implementato in C++.
In C++, la programmazione socket è un metodo che combina due o più nodi tra loro su una rete in modo che i nodi possano condividere i dati senza alcuna perdita di dati. In questo caso, un nodo ascolta una porta connessa a un particolare indirizzo IP. Quando il client raggiunge il server, il server crea il listener del socket.
Cos'è una presa?
Comprendiamo il socket parlando dell'esempio in tempo reale. Una presa è un tipo di supporto che fornisce una connessione tra due dispositivi. La presa può essere un caricabatterie del telefono che fornisce la connessione tra la presa e il telefono o tra il telefono e il laptop. Con l'aiuto di un socket si collegano diverse applicazioni alla rete locale con porte diverse. Ogni volta che viene creato il socket, il server specifica il programma e quel programma specifica il socket e l'indirizzo del dominio.
Il socket è un tipo di meccanismo utilizzato per scambiare dati tra diversi processi. Qui questi processi sono presenti in dispositivi diversi o nello stesso dispositivo collegati in rete. Una volta creata la connessione per il socket, i dati possono essere inviati in entrambe le direzioni e continuano finché uno degli endpoint non chiude la connessione.
Procedura nella comunicazione client-server
Ci sono alcune procedure che dobbiamo seguire per stabilire la comunicazione client-server. Questi sono i seguenti.
Fasi per la creazione del socket del server
Ci sono alcune fasi attraverso le quali possiamo creare il socket per il server. Questi sono i seguenti.
Cos'è una connessione?
Una connessione è un tipo di relazione tra due macchine in cui i due software sono conosciuti l'uno dall'altro. Questi due software sanno come stabilire una connessione tra loro; in altre parole possiamo dire che questi due software sanno come inviare i bit in rete. Una connessione tramite socket significa che le due macchine dovrebbero conoscere tutte le informazioni tra loro, come il numero di telefono, l'indirizzo IP e la porta TCP.
Un socket è un tipo di oggetto simile al file che consente al programma di accettare la connessione in entrata e consentirgli di inviare o ricevere la connessione in entrata. Inoltre, è un tipo di risorsa assegnata al processo del server.
Il server può creare il socket con l'aiuto di socket(). Questo socket non può essere condiviso con nessun altro processore.
Fasi per il Cliente
- La presa su cui i dati possono essere comunicati tra loro.
- Il buffer di archiviazione può memorizzare dati sull'indirizzo, come addr_of_data e addr_of_buffer.
- Si occupa della dimensione del buffer, come len_of_data e len_of_buffer.
- Si tratta del flag che dice come verranno inviati i dati.
Passaggi per stabilire la connessione nel socket
Stabilisce una connessione tra i diversi client e il server. Ma sia il client che il server possono gestire la connessione socket. Ogni processo deve stabilire una connessione per il proprio socket.
I passaggi necessari per stabilire un socket sul lato client sono i seguenti:
- Crea un socket con l'aiuto di una chiamata di sistema socket().
- Quindi dobbiamo connetterci con l'indirizzo socket del server con l'aiuto di una chiamata system().
- Quindi dobbiamo inviare e ricevere i dati. Possiamo farlo in vari modi. possiamo fare questa funzione read() e write().
I passaggi necessari per stabilire un socket sul lato server sono i seguenti:
- Per prima cosa crea un socket con l'aiuto di una chiamata di sistema socket().
- Quindi associa il socket a un indirizzo con l'aiuto della chiamata di sistema bind(). Un indirizzo è costituito da un numero di porta per il socket del server nella macchina host.
- Quindi ascolta la connessione con l'aiuto della chiamata di sistema listening ().
- Quindi il server accetta la connessione in entrata con l'aiuto della chiamata di sistema accetta(). Blocca inoltre tutti i comandi in entrata finché un client non viene connesso a un server.
- Quindi inizia il processo di invio e ricezione dei dati.
Connessione di più client senza multithreading
Ci sono vari esempi in cui vediamo come un singolo utente può connettersi al server. Nel mondo della programmazione di oggi, più utenti sono collegati al server con prese diverse.
Esistono vari modi per raggiungere questo obiettivo. Uno di questi è il multithreading. Con l'aiuto del multithreading, possiamo raggiungere questo obiettivo. Possiamo implementare un processo multithreading con l'aiuto della funzione select().
Esempio:
Codice per il cliente:
// Client side C/C++ program to demonstrate Socket // programming #include #include #include #include #include #define PORT 8080 int main(int argc, char const* argv[]) { int sock = 0, valread, client_fd; struct sockaddr_in serv_addr; char* hello = 'Hello from client'; char buffer[1024] = { 0 }; if ((sock = socket(AF_INET, SOCK_STREAM, 0)) <0) 0 8080 { printf(' socket creation error '); return -1; } serv_addr.sin_family="AF_INET;" serv_addr.sin_port="htons(PORT);" convert ipv4 and ipv6 addresses from text to binary form if (inet_pton(af_inet, '127.0.0.1', &serv_addr.sin_addr) <="0)" printf( ' invalid address not supported ((client_fd="connect(sock," (struct sockaddr*)&serv_addr, sizeof(serv_addr))) 0) printf(' connection failed send(sock, hello, strlen(hello), 0); printf('hello message sent '); valread="read(sock," buffer, 1024); printf('%s ', buffer); closing the connected close(client_fd); 0; code for server: server side c c++ program demonstrate programming #include #define port int main(int argc, char const* argv[]) server_fd, new_socket, valread; struct sockaddr_in address; opt="1;" addrlen="sizeof(address);" buffer[1024]="{" }; char* hello="Hello from server" ; creating file descriptor ((server_fd="socket(AF_INET," sock_stream, 0)) perror('socket failed'); exit(exit_failure); forcefully attaching (setsockopt(server_fd, sol_socket, so_reuseaddr | so_reuseport, &opt, sizeof(opt))) perror('setsockopt'); address.sin_family="AF_INET;" address.sin_addr.s_addr="INADDR_ANY;" address.sin_port="htons(PORT);" (bind(server_fd, sockaddr*)&address, sizeof(address)) perror('bind (listen(server_fd, 3) perror('listen'); ((new_socket="accept(server_fd," (socklen_t*)&addrlen)) perror('accept'); send(new_socket, close(new_socket); listening shutdown(server_fd, shut_rdwr); pre> <p> <strong>Compiling:</strong> </p> <img src="//techcodeview.com/img/c-tutorial/33/socket-programming-c-c-2.webp" alt="Socket Programming in C/C++"> <p> <strong>Output:</strong> </p> <img src="//techcodeview.com/img/c-tutorial/33/socket-programming-c-c-3.webp" alt="Socket Programming in C/C++"> <h2>Uses of Socket Programming</h2> <p>Socket programs are used to communicate between various processes, usually running on different systems. It is mostly used to create a client-server environment. This post provides the various functions used to create the server and client program and an example program.</p> <p>In the example, the client program sends a file name to the server, and the server sends the contents of the file back to the client. Socket programming usually pertains to basic communication protocols like TCP/UDP and raw sockets like ICMP. These protocols have a small communication overhead when compared to underlying protocols such as HTTP/DHCP/SMTP etc.</p> <p> <strong>Some of the basic data communications between the client and server are:</strong> </p> <ul> <li>File Transfer: Sends name and gets a file.</li> <li>Web Page: Sends URL and gets a page.</li> <li>Echo: Sends a message and gets it back.</li> </ul> <h2>Disadvantages</h2> <ul> <li>C++ can establish communication only with the machine requested and not with any other machine on the network.</li> <li>Sockets allow only raw data to be sent. This means that the client and server need mechanisms to interpret the data.</li> </ul> <hr></0)>