У данашњем свету, рачунарске мреже играју важну улогу у области преноса података. То је тема коју сваки програмер треба да зна. Под рачунарском мрежом, соцкет програмирање је једна од најважнијих тема у свету програмирања. У овој теми разматрамо програмирање сокета и различите методе програмирања утичнице које се имплементирају у Ц++.
У Ц++, програмирање сокета је метода која комбинује два или више чворова један са другим преко мреже тако да чворови могу да деле податке без икаквог губитка података. У вези са тим, један чвор слуша један порт који је повезан са одређеном ИП адресом. Када клијент дође до сервера, сервер креира слушалац утичнице.
Шта је утичница?
Хајде да разумемо утичницу говорећи пример у реалном времену. Утичница је врста медија који обезбеђује везу између два уређаја. Утичница може бити или пуњач телефона који обезбеђује везу између утичнице и телефона или телефона и тог лаптопа. Уз помоћ сокета, различите апликације се прикључују на локалну мрежу са различитим портовима. Сваки пут када се сокет креира, сервер специфицира програм, а тај програм специфицира сокет и адресу домена.
јава наследство
Утичница је врста механизма који се користи за размену података између различитих процеса. Овде су ови процеси или присутни на различитим уређајима или на истом уређају који су повезани преко мреже. Када се успостави веза за утичницу, подаци се могу послати у оба смера и наставити све док једна од крајњих тачака не затвори везу.
Процедура у комуникацији клијент-сервер
Постоје неке процедуре које морамо да следимо да бисмо успоставили комуникацију клијент-сервер. Ово су следеће.
Фазе за креирање серверске утичнице
Постоје неке фазе у којима можемо креирати сокет за сервер. Ово су следеће.
Шта је конекција?
Веза је врста односа између две машине где су два софтвера позната један о другом. Ова два софтвера знају како да успоставе везу један са другим; другим речима, можемо рећи да ова два софтвера знају како да пошаљу битове преко мреже. Веза утичнице значи да две машине треба да знају све информације једна о другој, као што су број телефона, ИП адреса и ТЦП порт.
јава како заобићи
Утичница је тип објекта који је сличан датотеци који дозвољава програму да прихвати долазну везу и дозволи им да пошаље или прими долазну везу. Такође, то је врста ресурса додељеног процесу сервера.
Сервер може креирати сокет уз помоћ соцкет(). Ова утичница се не може делити ни са једним другим процесором.
Фазе за клијента
- Утичница на којој се подаци могу међусобно комуницирати.
- Бафер за складиштење може да складишти податке о адреси, као што су аддр_оф_дата и аддр_оф_буффер.
- Бави се величином бафера, као што су лен_оф_дата и лен_оф_буффер.
- Бави се заставицом која каже како ће подаци бити послати.
Кораци за успостављање везе у утичници
Он успоставља везу између различитих клијената и сервера. Али и клијент и сервер могу да управљају везом утичнице. Сваки процес мора да успостави везу за сопствену утичницу.
Кораци укључени у успостављање утичнице на страни клијента су следећи:
- Он креира утичницу уз помоћ системског позива соцкет().
- Затим морамо да се повежемо са адресом сокета сервера уз помоћ систем() позива.
- Затим морамо послати и примити податке. То можемо учинити на различите начине. можемо да урадимо ову функцију реад() и врите().
Кораци укључени у успостављање утичнице на страни сервера су следећи:
јава једнака
- Прво креира утичницу уз помоћ системског позива соцкет().
- Затим везује утичницу за адресу уз помоћ бинд() системског позива. Адреса се састоји од броја порта за утичницу сервера на главној машини.
- Затим ослушкује везу уз помоћ системског позива слушања ().
- Затим сервер прихвата долазну везу уз помоћ аццепт() системског позива. Такође блокира све долазне команде док се клијент не повеже са сервером.
- Тада почиње процес слања и пријема података.
Повезивање више клијената без мултитхреадинг-а
Постоје разни примери у којима видимо како се један корисник може повезати са сервером. У данашњем свету програмирања, више корисника је повезано на сервер са различитим утичницама.
Постоје различити начини да се то постигне. Један од њих је мултитхреадинг. Уз помоћ мултитхреадинга то можемо постићи. Можемо имплементирати вишенитни процес уз помоћ функције селецт().
Пример:
Код за клијента:
// 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)>