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.
Procedura u komunikaciji klijent-poslužitelj
Postoje neki postupci koje moramo slijediti kako bismo uspostavili komunikaciju klijent-poslužitelj. To su sljedeći.
Faze za kreiranje poslužiteljske utičnice
Postoje neke faze u kojima možemo stvoriti utičnicu za poslužitelj. To su sljedeći.
Š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.
Faze za klijenta
- 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 = '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)>