I dagens verden spiller computernetværk en vigtig rolle inden for dataoverførsel. Det er et emne, som enhver programmør bør kende til. Under computernetværket er socket-programmering et af de vigtigste emner i programmeringsverdenen. I dette emne gør vi for at diskutere socket-programmering og den forskellige metode til socket-programmering, der er implementeret i C++.
I C++ er socket-programmering en metode, der kombinerer to eller flere noder med hinanden over et netværk, så noderne kan dele data uden tab af data. I den forbindelse lytter én node til én port, som er forbundet med en bestemt IP-adresse. Når klienten når serveren, opretter serveren socket-lytteren.
Hvad er en Socket?
Lad os forstå stikket ved at tale om realtidseksemplet. Et stik er en type medie, der giver forbindelse mellem to enheder. Stikkontakten kan enten være en telefonoplader, der giver forbindelsen mellem stikkontakten og telefonen eller telefonen og den bærbare computer. Ved hjælp af et stik tilsluttes forskellige applikationer til det lokale netværk med forskellige porte. Hver gang, når socket oprettes, specificerer serveren programmet, og det program specificerer socket og domæneadressen.
Sokkelen er en type mekanisme, der bruges til at udveksle data mellem forskellige processer. Her er disse processer enten til stede i forskellige enheder eller den samme enhed, som er forbundet over et netværk. Når forbindelsen til stikket er oprettet, så kan dataene sendes i begge retninger og fortsætter, indtil et af endepunkterne lukker forbindelsen.
Procedure i klient-server kommunikation
Der er nogle procedurer, som vi skal følge for at etablere klient-server-kommunikation. Disse er som følger.
Stadier til oprettelse af serversocket
Der er nogle trin, hvorved vi kan oprette socket til serveren. Disse er som følger.
Hvad er en forbindelse?
En forbindelse er en type forhold mellem to maskiner, hvor de to software er kendt om hinanden. Disse to software ved, hvordan man etablerer en forbindelse med hinanden; med andre ord kan vi sige, at disse to software ved, hvordan man sender bits over netværket. En tilslutning af stikket betyder, at de to maskiner skal kende alle oplysninger mellem hinanden, såsom telefonnummer, IP-adresse og TCP-porten.
En socket er en type objekt, der ligner den fil, der tillader programmet at acceptere den indgående forbindelse og give dem mulighed for at sende eller modtage den indgående forbindelse. Det er også en type ressource, der er tildelt serverens proces.
Serveren kan oprette socket ved hjælp af socket(). Denne socket kan ikke deles med nogen anden processor.
Stadier til klient
- Den stikdåse, hvorpå data kan kommunikeres med hinanden.
- Lagerbufferen kan gemme data om adressen, som addr_of_data og addr_of_buffer.
- Det omhandler størrelsen af bufferen, som len_of_data og len_of_buffer.
- Det omhandler flaget, der siger, hvordan dataene vil blive sendt.
Trin til at etablere forbindelsen i stikket
Det etablerer en forbindelse mellem de forskellige klienter og serveren. Men både klienten og serveren kan håndtere socketforbindelsen. Hver proces skal etablere en forbindelse til sit eget stik.
De trin, der er involveret i etablering af en stikkontakt på klientsiden, er som følger:
- Det opretter en socket ved hjælp af et socket() systemkald.
- Så skal vi forbinde med serverens socket-adresse ved hjælp af et system()-kald.
- Så skal vi sende og modtage dataene. Det kan vi gøre på forskellige måder. vi kan gøre denne read() og write() funktion.
De trin, der er involveret i at etablere en socket på serversiden, er som følger:
- Den opretter først en socket ved hjælp af et socket() systemkald.
- Derefter binder den socket til en adresse ved hjælp af bind() systemkaldet. En adresse består af et portnummer til serversocket i værtsmaskinen.
- Derefter lytter den efter forbindelsen ved hjælp af det lyttende () systemkald.
- Så accepterer serveren den indgående forbindelse ved hjælp af accept() systemkald. Det blokerer også alle indgående kommandoer, indtil en klient er forbundet til en server.
- Derefter starter processen med at sende og modtage data.
Tilslutning af flere klienter uden multithreading
Der er forskellige eksempler, hvor vi ser, hvordan en enkelt bruger kan oprette forbindelse til serveren. I nutidens programmeringsverden er flere brugere forbundet til serveren med forskellige sockets.
Der er forskellige måder at opnå dette på. En af dem er multithreading. Ved hjælp af multithreading kan vi opnå dette. Vi kan implementere en multithreading-proces ved hjælp af ved hjælp af select()-funktionen.
Eksempel:
Kode til klienten:
// 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)>