Šiuolaikiniame pasaulyje kompiuterių tinklai atlieka svarbų vaidmenį duomenų perdavimo srityje. Tai dalykas, kurį turėtų žinoti kiekvienas programuotojas. Kompiuterių tinkle lizdų programavimas yra viena iš svarbiausių temų programavimo pasaulyje. Šioje temoje aptariame lizdų programavimą ir skirtingą lizdų programavimo metodą, kuris yra įdiegtas C++.
C++ kalboje lizdų programavimas yra metodas, kuris tinkle sujungia du ar daugiau mazgų, kad mazgai galėtų dalytis duomenimis neprarasdami duomenų. Šiuo atžvilgiu vienas mazgas klauso vieno prievado, prijungto prie tam tikro IP adreso. Kai klientas pasiekia serverį, serveris sukuria lizdo klausytoją.
specialiųjų simbolių pavadinimas
Kas yra lizdas?
Supraskime apie lizdą pateikdami realiojo laiko pavyzdį. Lizdas yra laikmena, kuri užtikrina ryšį tarp dviejų įrenginių. Lizdas gali būti telefono įkroviklis, kuris užtikrina ryšį tarp lizdo ir telefono arba telefono ir to nešiojamojo kompiuterio. Lizdo pagalba prie vietinio tinklo su skirtingais prievadais prijungiamos įvairios programos. Kiekvieną kartą, kai sukuriamas lizdas, serveris nurodo programą, o ta programa nurodo lizdą ir domeno adresą.
Lizdas yra mechanizmo tipas, naudojamas keistis duomenimis tarp skirtingų procesų. Čia šie procesai vyksta skirtinguose įrenginiuose arba tame pačiame įrenginyje, kuris yra prijungtas per tinklą. Sukūrus lizdo ryšį, duomenys gali būti siunčiami abiem kryptimis ir tęsiami tol, kol vienas iš galinių taškų nutraukia ryšį.
Kliento ir serverio komunikacijos procedūra
Yra keletas procedūrų, kurių turime laikytis norėdami užmegzti kliento ir serverio ryšį. Tai yra taip.
Serverio lizdo kūrimo etapai
Yra keletas etapų, kuriais galime sukurti serverio lizdą. Tai yra taip.
Kas yra Ryšys?
Ryšys yra ryšys tarp dviejų mašinų, kai abi programinės įrangos yra žinomos viena apie kitą. Šios dvi programinės įrangos žino, kaip užmegzti ryšį viena su kita; Kitaip tariant, galime pasakyti, kad šios dvi programinės įrangos žino, kaip siųsti bitus tinkle. Lizdo prijungimas reiškia, kad abu įrenginiai turėtų žinoti visą tarpusavyje susijusią informaciją, pvz., telefono numerį, IP adresą ir TCP prievadą.
Lizdas yra objekto tipas, panašus į failą, leidžiantį programai priimti įeinantį ryšį ir leisti siųsti arba priimti įeinantį ryšį. Be to, tai yra serverio procesui priskirtas išteklių tipas.
Serveris gali sukurti lizdą naudodamas socket(). Šio lizdo negalima bendrinti su jokiu kitu procesoriumi.
Kliento etapai
- Lizdas, kuriame duomenys gali būti perduodami tarpusavyje.
- Saugojimo buferis gali saugoti duomenis apie adresą, pvz., addr_of_data ir addr_of_buffer.
- Tai susiję su buferio dydžiu, pvz., len_of_data ir len_of_buffer.
- Tai susiję su vėliava, nurodančia, kaip bus siunčiami duomenys.
Veiksmai, kaip užmegzti ryšį su lizdu
Jis nustato ryšį tarp skirtingų klientų ir serverio. Tačiau ir klientas, ir serveris gali valdyti lizdo ryšį. Kiekvienas procesas turi sukurti ryšį su savo lizdu.
sąrašą rūšiuoti java
Veiksmai, susiję su lizdo sukūrimu kliento pusėje, yra šie:
- Jis sukuria lizdą su socket() sistemos iškvietimu.
- Tada mes turime prisijungti prie serverio lizdo adreso sistemos () skambučio pagalba.
- Tada mes turime siųsti ir gauti duomenis. Tai galime padaryti įvairiais būdais. galime atlikti šią skaitymo () ir rašymo () funkciją.
Veiksmai, susiję su lizdo sukūrimu serverio pusėje, yra tokie:
- Pirmiausia jis sukuria lizdą su socket() sistemos iškvietimu.
- Tada jis susieja lizdą su adresu, naudodamas bind() sistemos iškvietimą. Adresą sudaro pagrindinio kompiuterio serverio lizdo prievado numeris.
- Tada jis klausosi ryšio, naudodamas klausymosi () sistemos skambutį.
- Tada serveris priima įeinantį ryšį, naudodamas accept() sistemos iškvietimą. Jis taip pat blokuoja visas gaunamas komandas, kol klientas neprisijungia prie serverio.
- Tada prasideda duomenų siuntimo ir gavimo procesas.
Kelių klientų prijungimas be kelių gijų
Yra įvairių pavyzdžių, kuriuose matome, kaip vienas vartotojas gali prisijungti prie serverio. Šiuolaikiniame programavimo pasaulyje keli vartotojai yra prijungti prie serverio skirtingais lizdais.
Yra įvairių būdų tai pasiekti. Vienas iš jų yra daugiasriegis. Naudodamiesi daugiasriegiu siūlu, galime tai pasiekti. Mes galime įgyvendinti kelių gijų procesą, naudodami funkciją select().
Pavyzdys:
Kodas klientui:
// 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)>