In de wereld van vandaag spelen computernetwerken een belangrijke rol op het gebied van gegevensoverdracht. Het is een onderwerp dat elke programmeur zou moeten kennen. Onder het computernetwerk is socketprogrammering een van de belangrijkste onderwerpen in de programmeerwereld. In dit onderwerp bespreken we socketprogrammering en de verschillende methoden voor socketprogrammering die in C++ zijn geïmplementeerd.
In C++ is socketprogrammering een methode die twee of meer knooppunten met elkaar combineert via een netwerk, zodat de knooppunten de gegevens kunnen delen zonder enig verlies van gegevens. Hierbij luistert één knooppunt naar één poort die is verbonden met een bepaald IP-adres. Wanneer de client de server bereikt, maakt de server de socket-listener aan.
Wat is een stopcontact?
Laten we de socket begrijpen door het realtime voorbeeld te bespreken. Een stopcontact is een soort medium dat zorgt voor een verbinding tussen twee apparaten. Het stopcontact kan een telefoonoplader zijn die zorgt voor de verbinding tussen het stopcontact en de telefoon, of tussen de telefoon en die laptop. Met behulp van een socket worden verschillende applicaties met verschillende poorten op het lokale netwerk aangesloten. Elke keer dat de socket wordt aangemaakt, specificeert de server het programma, en dat programma specificeert de socket en het domeinadres.
De socket is een soort mechanisme dat wordt gebruikt om gegevens tussen verschillende processen uit te wisselen. Hier zijn deze processen aanwezig op verschillende apparaten of op hetzelfde apparaat dat via een netwerk is verbonden. Zodra de verbinding voor de socket tot stand is gebracht, kunnen de gegevens in beide richtingen worden verzonden, totdat een van de eindpunten de verbinding verbreekt.
tekenreeks Java
Procedure bij client-servercommunicatie
Er zijn enkele procedures die we moeten volgen om client-server-communicatie tot stand te brengen. Deze zijn als volgt.
Fasen voor het maken van serversockets
Er zijn enkele fasen waarmee we de socket voor de server kunnen maken. Deze zijn als volgt.
Wat is een verbinding?
Een verbinding is een soort relatie tussen twee machines waarbij de twee software over elkaar bekend zijn. Deze twee software weten hoe ze een verbinding met elkaar tot stand moeten brengen; met andere woorden, we kunnen zeggen dat deze twee software weten hoe de bits over het netwerk moeten worden verzonden. Een verbinding van de socket betekent dat de twee machines alle informatie van elkaar moeten kennen, zoals het telefoonnummer, het IP-adres en de TCP-poort.
Een socket is een type object dat vergelijkbaar is met het bestand waarmee het programma de inkomende verbinding kan accepteren en de inkomende verbinding kan verzenden of ontvangen. Het is ook een type bron dat wordt toegewezen aan het proces van de server.
De server kan de socket maken met behulp van socket(). Deze socket kan niet worden gedeeld met een andere processor.
Fasen voor klant
- Het stopcontact waarop de gegevens met elkaar kunnen worden gecommuniceerd.
- De opslagbuffer kan gegevens over het adres opslaan, zoals addr_of_data en addr_of_buffer.
- Het gaat over de grootte van de buffer, zoals len_of_data en len_of_buffer.
- Het gaat over de vlag die aangeeft hoe de gegevens worden verzonden.
Stappen om de verbinding in de socket tot stand te brengen
Het brengt een verbinding tot stand tussen de verschillende clients en de server. Maar zowel de client als de server kunnen de socketverbinding aan. Elk proces moet een verbinding tot stand brengen voor zijn eigen socket.
De stappen die betrokken zijn bij het opzetten van een socket aan de clientzijde zijn als volgt:
- Het creëert een socket met behulp van een socket() systeemaanroep.
- Vervolgens moeten we verbinding maken met het socketadres van de server met behulp van een system()-aanroep.
- Vervolgens moeten wij de gegevens verzenden en ontvangen. Dit kunnen wij op verschillende manieren doen. we kunnen deze lees() en schrijf() functie uitvoeren.
De stappen die betrokken zijn bij het tot stand brengen van een socket aan de serverzijde zijn als volgt:
wat zit er in python
- Het maakt eerst een socket aan met behulp van een socket() systeemaanroep.
- Vervolgens bindt het de socket aan een adres met behulp van de systeemaanroep bind(). Een adres bestaat uit een poortnummer voor de serversocket in de hostmachine.
- Vervolgens luistert het naar de verbinding met behulp van de luisterende () systeemoproep.
- Vervolgens accepteert de server de inkomende verbinding met behulp van de accept() systeemaanroep. Het blokkeert ook alle inkomende opdrachten totdat een client is verbonden met een server.
- Vervolgens begint het proces van het verzenden en ontvangen van gegevens.
Meerdere clients verbinden zonder multithreading
Er zijn verschillende voorbeelden waarin we zien hoe een enkele gebruiker verbinding kan maken met de server. In de hedendaagse programmeerwereld zijn meerdere gebruikers via verschillende sockets met de server verbonden.
Er zijn verschillende manieren om dit te bereiken. Eén daarvan is multithreading. Met behulp van multithreading kunnen we dit bereiken. We kunnen een multithreading-proces implementeren met behulp van de select() functie.
Voorbeeld:
Code voor de klant:
// 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)>