logo

Programiranje utičnica u C/C++

U današnjem svijetu računalne mreže igraju važnu ulogu u području prijenosa podataka. To je tema koju bi svaki programer trebao znati. U sklopu računalne mreže, programiranje soketa jedna je od najvažnijih tema u svijetu programiranja. U ovoj temi raspravljamo o programiranju utičnica i različitim metodama programiranja utičnica koje su implementirane u C++.

U C++-u, programiranje utičnica je metoda koja kombinira dva ili više čvorova jedan s drugim preko mreže tako da čvorovi mogu dijeliti podatke bez gubitka podataka. U ovoj vezi, jedan čvor sluša jedan port koji je povezan na određenu IP adresu. Kada klijent dođe do poslužitelja, poslužitelj stvara slušatelja utičnice.

Što je Socket?

Razmotrimo nešto o utičnici govoreći o primjeru u stvarnom vremenu. Utičnica je vrsta medija koji omogućuje vezu između dva uređaja. Utičnica može biti ili telefonski punjač koji omogućuje vezu između utičnice i telefona ili telefona i tog laptopa. Uz pomoć utičnice, različite aplikacije se spajaju na lokalnu mrežu s različitim portovima. Svaki put kada se kreira socket, server specificira program, a taj program specificira socket i adresu domene.

python __dict__

Socket je vrsta mehanizma koji se koristi za razmjenu podataka između različitih procesa. Ovdje su ti procesi ili prisutni u različitim uređajima ili istom uređaju koji su povezani preko mreže. Nakon što se stvori veza za utičnicu, podaci se mogu slati u oba smjera i nastavljaju se sve dok jedna od krajnjih točaka ne zatvori vezu.

Programiranje utičnica u C/C++

Procedura u komunikaciji klijent-poslužitelj

Postoje neki postupci koje moramo slijediti kako bismo uspostavili komunikaciju klijent-poslužitelj. To su sljedeći.

    Utičnica:Uz pomoć socketa možemo stvoriti novu komunikaciju.Vezati:Uz pomoć ovoga možemo, možemo priložiti lokalnu adresu s utičnicom.Slušati:Uz ovu pomoć; možemo prihvatiti vezu.Prihvatiti:Uz ovu pomoć; možemo blokirati dolaznu vezu dok ne stigne zahtjev.Spojiti:Uz ovu pomoć; možemo pokušati uspostaviti vezu.Poslati:Uz pomoć ovoga; možemo poslati podatke preko mreže.Primi:Uz ovu pomoć; podatke možemo primati preko mreže.Zatvoriti:Uz pomoć toga možemo osloboditi vezu s mreže.

Faze za kreiranje poslužiteljske utičnice

Postoje neke faze u kojima možemo stvoriti utičnicu za poslužitelj. To su sljedeći.

    int socketcr:Utičnica (domena, vrsta, protokol)Socketcr:To je cjelobrojni tip i sličan je rukovatelju datotekama.Domena:To je komunikacijska domena i cjelobrojnog je tipa.Tip:To je tip komunikacije.SOCK_DGRAM:To je vrsta UDP-a koja je nepouzdana i bez veze.Protokol:Koristi se za dodjeljivanje vrijednosti protokola za IP adresu, koja je 0. Vrijednost protokola slična je vrijednosti koja se pojavljuje u polju protokola IP zaglavlja džepa.

Što je veza?

Veza je vrsta odnosa između dvaju strojeva gdje su dva softvera poznata jedan o drugome. Ova dva softvera znaju kako uspostaviti međusobnu vezu; drugim riječima, možemo reći da ova dva softvera znaju slati bitove preko mreže. Veza utičnice znači da dva stroja trebaju znati sve međusobne informacije, poput telefonskog broja, IP adrese i TCP porta.

c# primjeri koda

Utičnica je vrsta objekta koja je slična datoteci koja programu omogućuje prihvaćanje dolazne veze i dopušta im slanje ili primanje dolazne veze. Također, to je vrsta resursa dodijeljena procesu poslužitelja.

Poslužitelj može kreirati utičnicu uz pomoć socket(). Ova se utičnica ne može dijeliti ni s jednim drugim procesorom.

    Setsockopt:Uz pomoć Setsockopta, možemo manipulirati raznim opcijama utičnice, na koje upućuje deskriptor datoteke utičnice. Ovaj postupak je potpuno neobavezan. Uz pomoć Setsockopta, možemo ponovno koristiti port i adresu klijenta i poslužitelja. Kada poslužitelj daje pogrešku 'adresa je već u upotrebi', možemo to spriječiti uz pomoć Setsockopta.Vezati:Možemo povezati utičnicu s adresom i portom uz pomoć funkcije vezanja. Ova se operacija izvodi nakon stvaranja utičnice. Na primjer, ako pokušamo povezati poslužitelj s lokalnim hostom, tada koristimo INADDR_ANY za definiranje IP adrese poslužitelja.Slušati:Možemo napraviti utičnicu načina povezivanja uz pomoć funkcije listening to (). Primjer utičnice načina povezivanja je SOCK_STREAM. Ovo se može definirati argumentom utičnice. Ovo se koristi za prihvaćanje dolazne veze, izvođenje operacije čekanja za dolaznu vezu i izvođenje zaostatka dolazne veze. Kada dolazna veza od poslužitelja zatraži potvrdu, utičnica se stavlja u pasivni način rada. Parametar zaostatka poslužitelja odnosi se na činjenicu da ne može dopustiti više od jedne veze s poslužiteljem u isto vrijeme. Ako je stigla neka dolazna veza i red čekanja je pun, tada poslužitelj daje pogrešku s indikacijom ' ECONNREFUSED.' Uz pomoć listen(), dolazna veza je na čekanju, a kada je red čekanja prazan, poziva sve dolazne veze na poslužitelj.Prihvatiti:Uz pomoć accept() sistemskog poziva; možemo napraviti utičnicu na temelju veze. Neki socketi koji se temelje na povezivanju su SOCK_STREAM i SOCK_SEQPACKET. Izdvaja sve dolazne veze koje dolaze prve i dopušta njihov zahtjev da ode na poslužitelj. Novopovezana lista nije u mogućnosti slušati uz pomoć drugog argumenta za stvaranje nove utičnice.

Faze za klijenta

    Priključak na utičnicu:To je potpuno isto kao i metoda za stvaranje poslužitelja.Spojiti:Možemo inicirati vezu sa socketom uz pomoć connect() sistemskog poziva. Ako je parametar za utičnicu tipa SOCK_DGRAM, tada možemo definirati datagram kao trajni uz pomoć connect(). Ako je utičnica tipa SOCK_STREAM, tada možemo pokušati uspostaviti drugu vezu za poslužitelj. Uz pomoć funkcije connect() također možemo napraviti vezu za inozemnu udrugu. Ako je utičnica nevezana, tada sustav dodjeljuje jedinstvenu vrijednost lokalnoj asocijaciji. Kada sustav uspješno završi pozive, utičnica je spremna za slanje ili primanje bilo koje vrste podataka.Pošalji/Primi:Funkcije send() i recv() mogu izvesti operaciju u nastavku.
  • Utičnica na kojoj se podaci mogu međusobno komunicirati.
  • Međuspremnik za pohranu može pohraniti podatke o adresi, kao što su addr_of_data i addr_of_buffer.
  • Bavi se veličinom međuspremnika, poput len_of_data i len_of_buffer.
  • Bavi se zastavom koja govori kako će podaci biti poslani.

Koraci za uspostavljanje veze u utičnici

Uspostavlja vezu između različitih klijenata i poslužitelja. Ali i klijent i poslužitelj mogu rukovati socket vezom. Svaki proces mora uspostaviti vezu za svoju utičnicu.

Koraci uključeni u uspostavljanje utičnice na strani klijenta su sljedeći:

  • Stvara utičnicu uz pomoć socket() sistemskog poziva.
  • Zatim se moramo povezati s adresom utičnice poslužitelja uz pomoć system() poziva.
  • Zatim moramo poslati i primiti podatke. To možemo učiniti na razne načine. možemo raditi ovu funkciju read() i write().

Koraci uključeni u uspostavljanje utičnice na strani poslužitelja su sljedeći:

rekha filmska glumica
  • Prvo stvara utičnicu uz pomoć socket() sistemskog poziva.
  • Zatim povezuje utičnicu s adresom uz pomoć bind() sistemskog poziva. Adresa se sastoji od broja porta za utičnicu poslužitelja u glavnom računalu.
  • Zatim osluškuje vezu uz pomoć slušanja () sistemskog poziva.
  • Zatim poslužitelj prihvaća dolaznu vezu uz pomoć accept() sistemskog poziva. Također blokira sve dolazne naredbe dok se klijent ne spoji na poslužitelj.
  • Tada počinje proces slanja i primanja podataka.

Povezivanje više klijenata bez višenitnosti

Postoje različiti primjeri u kojima vidimo kako se jedan korisnik može povezati s poslužiteljem. U današnjem svijetu programiranja više korisnika povezano je na poslužitelj s različitim utičnicama.

Postoje različiti načini da se to postigne. Jedan od njih je multithreading. Uz pomoć multithreadinga to možemo postići. Možemo implementirati višenitni proces uz pomoć pomoću funkcije select().

Primjer:

Šifra za klijenta:

 // 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 = &apos;Hello from client&apos;; 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)>