I dagens verden spiller datanettverk en viktig rolle i dataoverføringsfeltet. Det er et emne som hver programmerer bør kjenne til. Under datanettverket er socket-programmering et av de viktigste temaene i programmeringsverdenen. I dette emnet gjør vi for å diskutere socket-programmering og den forskjellige metoden for socket-programmering som er implementert i C++.
I C++ er socket-programmering en metode som kombinerer to eller flere noder med hverandre over et nettverk slik at nodene kan dele dataene uten tap av data. I denne forbindelse lytter én node til én port som er koblet til en bestemt IP-adresse. Når klienten når serveren, oppretter serveren socket-lytteren.
Hva er en socket?
La oss forstå om stikkontakten ved å snakke om sanntidseksemplet. En stikkontakt er en type medium som gir en forbindelse mellom to enheter. Kontakten kan enten være en telefonlader som gir forbindelsen mellom stikkontakten og telefonen eller telefonen og den bærbare datamaskinen. Ved hjelp av en socket kobles forskjellige applikasjoner til det lokale nettverket med forskjellige porter. Hver gang socket opprettes, spesifiserer serveren programmet, og det programmet spesifiserer socket og domeneadressen.
Socket er en type mekanisme som brukes til å utveksle data mellom ulike prosesser. Her er disse prosessene enten tilstede i forskjellige enheter eller samme enhet som er koblet over et nettverk. Når forbindelsen for stikkontakten er opprettet, kan dataene sendes i begge retninger og fortsetter til et av endepunktene lukker forbindelsen.
Prosedyre i klient-serverkommunikasjon
Det er noen prosedyrer vi må følge for å etablere klient-server-kommunikasjon. Disse er som følger.
Stadier for opprettelse av serversocket
Det er noen stadier der vi kan opprette kontakten for serveren. Disse er som følger.
Hva er en tilkobling?
En forbindelse er en type forhold mellom to maskiner der de to programvarene er kjent om hverandre. Disse to programvarene vet hvordan de oppretter en forbindelse med hverandre; med andre ord kan vi si at denne to programvaren vet hvordan de skal sende bitene over nettverket. En tilkobling av stikkontakten betyr at de to maskinene skal vite all informasjonen mellom hverandre, som telefonnummer, IP-adresse og TCP-porten.
En socket er en type objekt som ligner på filen som lar programmet godta den innkommende tilkoblingen og tillate dem å sende eller motta den innkommende tilkoblingen. Det er også en type ressurs som er tilordnet serverens prosess.
Serveren kan lage socket ved hjelp av socket(). Denne kontakten kan ikke deles med noen annen prosessor.
Stadier for klient
- Kontakten som dataene kan kommuniseres med hverandre på.
- Lagringsbufferen kan lagre data om adressen, som addr_of_data og addr_of_buffer.
- Den tar for seg størrelsen på bufferen, som len_of_data og len_of_buffer.
- Den omhandler flagget som sier hvordan dataene skal sendes.
Trinn for å etablere tilkoblingen i stikkontakten
Den etablerer en forbindelse mellom de forskjellige klientene og serveren. Men både klienten og serveren kan håndtere socket-tilkoblingen. Hver prosess må etablere en tilkobling for sin egen stikkontakt.
Trinnene involvert i å etablere en stikkontakt på klientsiden er som følger:
- Den lager en socket ved hjelp av et socket() systemkall.
- Da må vi koble til socket-adressen til serveren ved hjelp av et system()-kall.
- Da må vi sende og motta dataene. Dette kan vi gjøre på ulike måter. vi kan gjøre denne funksjonen read() og write().
Trinnene involvert i å etablere en socket på serversiden er som følger:
- Den oppretter først en socket ved hjelp av et socket() systemkall.
- Deretter binder den socket til en adresse ved hjelp av bind()-systemkallet. En adresse består av et portnummer for serverkontakten i vertsmaskinen.
- Deretter lytter den etter forbindelsen ved hjelp av det lyttende () systemanropet.
- Deretter aksepterer serveren den innkommende forbindelsen ved hjelp av accept() systemkall. Den blokkerer også alle innkommende kommandoer til en klient er koblet til en server.
- Deretter starter prosessen med å sende og motta data.
Koble til flere klienter uten multithreading
Det er ulike eksempler der vi ser hvordan en enkelt bruker kan koble seg til serveren. I dagens programmeringsverden er flere brukere koblet til serveren med forskjellige sockets.
Det er ulike måter å oppnå dette på. En av dem er multithreading. Ved hjelp av multithreading kan vi oppnå dette. Vi kan implementere en multithreading-prosess ved hjelp av funksjonen select().
Eksempel:
Kode for 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)>