I dagens värld spelar datornätverk en viktig roll inom dataöverföringsområdet. Det är ett ämne som varje programmerare bör känna till. Under datornätverket är socketprogrammering ett av de viktigaste ämnena i programmeringsvärlden. I det här ämnet diskuterar vi socketprogrammering och de olika metoderna för socketprogrammering som är implementerade i C++.
I C++ är socketprogrammering en metod som kombinerar två eller flera noder med varandra över ett nätverk så att noderna kan dela data utan att förlora data. I detta sammanhang lyssnar en nod på en port som är ansluten till en viss IP-adress. När klienten når servern skapar servern socketavlyssnaren.
Vad är en Socket?
Låt oss förstå uttaget genom att tala om realtidsexemplet. Ett uttag är en typ av medium som ger en anslutning mellan två enheter. Uttaget kan antingen vara en telefonladdare som ger anslutningen mellan uttaget och telefonen eller telefonen och den bärbara datorn. Med hjälp av ett uttag kopplas olika applikationer till det lokala nätverket med olika portar. Varje gång när socket skapas anger servern programmet, och det programmet anger socket och domänadressen.
t flip flop
Socket är en typ av mekanism som används för att utbyta data mellan olika processer. Här finns dessa processer antingen i olika enheter eller samma enhet som är anslutna över ett nätverk. När anslutningen för socket har skapats kan data skickas i båda riktningarna och fortsätter tills en av ändpunkterna stänger anslutningen.
Procedur i klient-serverkommunikation
Det finns några procedurer som vi måste följa för att upprätta klient-serverkommunikation. Dessa är följande.
Stadier för att skapa serversocket
Det finns några steg genom vilka vi kan skapa socket för servern. Dessa är följande.
Vad är en anslutning?
En anslutning är en typ av relation mellan två maskiner där de två mjukvarorna är kända om varandra. Dessa två mjukvaror vet hur man upprättar en förbindelse med varandra; med andra ord kan vi säga att dessa två mjukvaror vet hur man skickar bitarna över nätverket. En anslutning av uttaget innebär att de två maskinerna bör känna till all information mellan varandra, som telefonnummer, IP-adress och TCP-porten.
En socket är en typ av objekt som liknar filen som gör att programmet kan acceptera den inkommande anslutningen och låta dem skicka eller ta emot den inkommande anslutningen. Det är också en typ av resurs som tilldelas serverns process.
Servern kan skapa socket med hjälp av socket(). Detta uttag kan inte delas med någon annan processor.
Stadier för klient
- Uttaget där data kan kommuniceras med varandra.
- Lagringsbufferten kan lagra data om adressen, som addr_of_data och addr_of_buffer.
- Det handlar om storleken på bufferten, som len_of_data och len_of_buffer.
- Den handlar om flaggan som säger hur data ska skickas.
Steg för att upprätta anslutningen i uttaget
Det upprättar en anslutning mellan de olika klienterna och servern. Men både klienten och servern kan hantera socketanslutningen. Varje process måste upprätta en anslutning för sitt eget uttag.
Stegen för att etablera ett uttag på klientsidan är följande:
oxe vs tjur
- Den skapar en socket med hjälp av ett socket()-systemanrop.
- Sedan måste vi ansluta till serverns socket-adress med hjälp av ett system()-anrop.
- Sedan måste vi skicka och ta emot uppgifterna. Vi kan göra detta på olika sätt. vi kan göra den här funktionen read() och write().
Stegen som är involverade i att etablera en socket på serversidan är följande:
- Den skapar först en socket med hjälp av ett socket()-systemanrop.
- Sedan binder den socket till en adress med hjälp av bind()-systemanropet. En adress består av ett portnummer för serversocket i värddatorn.
- Sedan lyssnar den efter anslutningen med hjälp av det lyssnande () systemanropet.
- Sedan accepterar servern den inkommande anslutningen med hjälp av accept() systemanrop. Den blockerar också alla inkommande kommandon tills en klient är ansluten till en server.
- Sedan startar processen att skicka och ta emot data.
Ansluta flera klienter utan Multithreading
Det finns olika exempel där vi ser hur en enskild användare kan ansluta till servern. I dagens programmeringsvärld är flera användare anslutna till servern med olika uttag.
Det finns olika sätt att uppnå detta. En av dem är multithreading. Med hjälp av multithreading kan vi uppnå detta. Vi kan implementera en multithreading-process med hjälp av med hjälp av select()-funktionen.
Exempel:
Kod för kunden:
// 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)>