Mūsdienu pasaulē datortīkliem ir liela nozīme datu pārraides jomā. Tas ir priekšmets, kas jāzina katram programmētājam. Datortīklā ligzdas programmēšana ir viena no svarīgākajām tēmām programmēšanas pasaulē. Šajā tēmā mēs runājam par ligzdu programmēšanu un atšķirīgo ligzdu programmēšanas metodi, kas tiek ieviesta C++.
C++ valodā ligzdu programmēšana ir metode, kas tīklā apvieno divus vai vairākus mezglus, lai mezgli varētu koplietot datus, nezaudējot datus. Šajā sakarā viens mezgls klausās vienu portu, kas ir savienots ar noteiktu IP adresi. Kad klients sasniedz serveri, serveris izveido ligzdas klausītāju.
Kas ir ligzda?
Sapratīsim par kontaktligzdu, runājot reāllaika piemēru. Kontaktligzda ir datu nesēja veids, kas nodrošina savienojumu starp divām ierīcēm. Kontaktligzda var būt vai nu tālruņa lādētājs, kas nodrošina savienojumu starp ligzdu un tālruni vai tālruni un šo klēpjdatoru. Ar ligzdas palīdzību lokālajam tīklam tiek pievienotas dažādas lietojumprogrammas ar dažādiem portiem. Katru reizi, kad tiek izveidota ligzda, serveris norāda programmu, un šī programma norāda ligzdu un domēna adresi.
java rakstzīme uz virkni
Socket ir mehānisma veids, ko izmanto datu apmaiņai starp dažādiem procesiem. Šeit šie procesi notiek dažādās ierīcēs vai tajā pašā ierīcē, kas ir savienota tīklā. Kad savienojums ligzdai ir izveidots, datus var nosūtīt abos virzienos un turpināt, līdz viens no gala punktiem aizver savienojumu.
Klienta un servera komunikācijas procedūra
Ir dažas procedūras, kas mums jāievēro, lai izveidotu klienta un servera saziņu. Tie ir šādi.
Servera ligzdas izveides posmi
Ir daži posmi, kuros mēs varam izveidot servera ligzdu. Tie ir šādi.
Kas ir savienojums?
Savienojums ir attiecību veids starp divām mašīnām, kur abas programmatūras ir zināmas viena par otru. Šīs divas programmatūras zina, kā izveidot savienojumu viena ar otru; citiem vārdiem sakot, mēs varam teikt, ka šīs divas programmatūras zina, kā nosūtīt bitus tīklā. Kontaktligzdas savienojums nozīmē, ka abām iekārtām ir jāzina visa savstarpējā informācija, piemēram, tālruņa numurs, IP adrese un TCP ports.
romiešu ciparu diagramma 1100
Socket ir objekta veids, kas ir līdzīgs failam, kas ļauj programmai pieņemt ienākošo savienojumu un ļaut tai nosūtīt vai saņemt ienākošo savienojumu. Tas ir arī servera procesam piešķirtais resursa veids.
Serveris var izveidot ligzdu ar ligzdas () palīdzību. Šo ligzdu nevar koplietot ne ar vienu citu procesoru.
Posmi klientam
- Kontaktligzda, kurā datus var sazināties savā starpā.
- Krātuves buferis var saglabāt datus par adresi, piemēram, addr_of_data un addr_of_buffer.
- Tas attiecas uz bufera lielumu, piemēram, len_of_data un len_of_buffer.
- Tas attiecas uz karogu, kas norāda, kā dati tiks nosūtīti.
Darbības, lai izveidotu savienojumu ligzdā
Tas izveido savienojumu starp dažādiem klientiem un serveri. Bet gan klients, gan serveris var apstrādāt ligzdas savienojumu. Katram procesam ir jāizveido savienojums savai ligzdai.
Darbības, kas saistītas ar kontaktligzdas izveidi klienta pusē, ir šādas:
- Tas izveido ligzdu ar socket() sistēmas izsaukuma palīdzību.
- Pēc tam mums ir jāizveido savienojums ar servera ligzdas adresi ar sistēmas() izsaukuma palīdzību.
- Tad mums ir jānosūta un jāsaņem dati. Mēs to varam izdarīt dažādos veidos. mēs varam veikt šo lasīšanas () un rakstīšanas () funkciju.
Darbības, kas jāveic, lai izveidotu ligzdu servera pusē, ir šādas:
vaicājuma atlasītājs
- Vispirms tas izveido ligzdu ar sistēmas izsaukuma socket() palīdzību.
- Pēc tam tas saista ligzdu ar adresi, izmantojot bind() sistēmas izsaukumu. Adrese sastāv no resursdatora servera ligzdas porta numura.
- Pēc tam tas klausās savienojumu, izmantojot klausīšanās () sistēmas zvanu.
- Pēc tam serveris pieņem ienākošo savienojumu ar sistēmas izsaukuma accept() palīdzību. Tas arī bloķē visas ienākošās komandas, līdz klients ir savienots ar serveri.
- Pēc tam sākas datu nosūtīšanas un saņemšanas process.
Vairāku klientu savienošana bez vairāku pavedienu izveides
Ir dažādi piemēri, kuros redzams, kā viens lietotājs var izveidot savienojumu ar serveri. Mūsdienu programmēšanas pasaulē vairāki lietotāji ir savienoti ar serveri ar dažādām ligzdām.
Ir dažādi veidi, kā to panākt. Viens no tiem ir daudzpavedienu veidošana. Ar daudzpavedienu palīdzību mēs to varam sasniegt. Mēs varam īstenot vairāku pavedienu procesu ar funkcijas select() palīdzību.
Piemērs:
Kods klientam:
// 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)>