Dans le monde d'aujourd'hui, les réseaux informatiques jouent un rôle important dans le domaine du transfert de données. C'est un sujet que tout programmeur devrait connaître. Dans le cadre du réseau informatique, la programmation des sockets est l'un des sujets les plus importants dans le monde de la programmation. Dans cette rubrique, nous discutons de la programmation socket et des différentes méthodes de programmation socket implémentées en C++.
En C++, la programmation socket est une méthode qui combine deux nœuds ou plus entre eux sur un réseau afin que les nœuds puissent partager les données sans aucune perte de données. Dans cette connexion, un nœud écoute un port qui est connecté à une adresse IP particulière. Lorsque le client atteint le serveur, le serveur crée l'écouteur de socket.
Qu'est-ce qu'une prise ?
Comprenons le socket en parlant de l'exemple en temps réel. Une prise est un type de support qui assure une connexion entre deux appareils. La prise peut être soit un chargeur de téléphone qui assure la connexion entre la prise et le téléphone, soit le téléphone et cet ordinateur portable. A l'aide d'un socket, différentes applications sont connectées au réseau local avec différents ports. Chaque fois que le socket est créé, le serveur spécifie le programme, et ce programme spécifie le socket et l'adresse du domaine.
Le socket est un type de mécanisme utilisé pour échanger des données entre différents processus. Ici, ces processus sont soit présents dans différents appareils, soit dans le même appareil connecté via un réseau. Une fois la connexion pour le socket créée, les données peuvent être envoyées dans les deux sens et se poursuivent jusqu'à ce que l'un des points de terminaison ferme la connexion.
Procédure dans la communication client-serveur
Nous devons suivre certaines procédures pour établir une communication client-serveur. Ce sont les suivants.
Étapes de création de socket serveur
Il existe certaines étapes par lesquelles nous pouvons créer le socket pour le serveur. Ce sont les suivants.
Qu'est-ce qu'une connexion ?
Une connexion est un type de relation entre deux machines où les deux logiciels se connaissent. Ces deux logiciels savent établir une connexion entre eux ; autrement dit, on peut dire que ces deux logiciels savent envoyer les bits sur le réseau. Une connexion du socket signifie que les deux machines doivent connaître toutes les informations entre elles, comme le numéro de téléphone, l'adresse IP et le port TCP.
Un socket est un type d'objet similaire au fichier qui permet au programme d'accepter la connexion entrante et de lui permettre d'envoyer ou de recevoir la connexion entrante. Il s'agit également d'un type de ressource affectée au processus du serveur.
Le serveur peut créer le socket à l’aide de socket(). Ce socket ne peut être partagé avec aucun autre processeur.
Étapes pour le client
- Le socket sur lequel les données peuvent être communiquées entre elles.
- Le tampon de stockage peut stocker des données sur l'adresse, comme addr_of_data et addr_of_buffer.
- Il traite de la taille du tampon, comme len_of_data et len_of_buffer.
- Il s'agit du drapeau qui indique comment les données seront envoyées.
Étapes pour établir la connexion dans le socket
Il établit une connexion entre les différents clients et le serveur. Mais le client et le serveur peuvent gérer la connexion socket. Chaque processus doit établir une connexion pour son propre socket.
Les étapes impliquées dans l'établissement d'un socket côté client sont les suivantes :
- Il crée une socket à l’aide d’un appel système socket().
- Ensuite, nous devons nous connecter avec l'adresse socket du serveur à l'aide d'un appel system().
- Ensuite, nous devons envoyer et recevoir les données. Nous pouvons le faire de différentes manières. nous pouvons faire cette fonction read() et write().
Les étapes impliquées dans l'établissement d'un socket côté serveur sont les suivantes :
- Il crée d’abord une socket à l’aide d’un appel système socket().
- Ensuite, il lie le socket à une adresse à l’aide de l’appel système bind(). Une adresse consiste en un numéro de port pour le socket serveur de la machine hôte.
- Ensuite, il écoute la connexion à l'aide de l'appel système listening ().
- Ensuite, le serveur accepte la connexion entrante à l’aide de l’appel système accept(). Il bloque également toutes les commandes entrantes jusqu'à ce qu'un client soit connecté à un serveur.
- Ensuite, le processus d’envoi et de réception des données commence.
Connexion de plusieurs clients sans multithreading
Il existe différents exemples dans lesquels nous voyons comment un seul utilisateur peut se connecter au serveur. Dans le monde de la programmation d'aujourd'hui, plusieurs utilisateurs sont connectés au serveur avec différents sockets.
Il existe différentes manières d’y parvenir. L'un d'eux est le multithread. Avec l’aide du multithreading, nous pouvons y parvenir. Nous pouvons implémenter un processus multithreading à l’aide de la fonction select().
Exemple:
Code pour le client :
// 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)>