logo

Програмирање сокета у Ц/Ц++

У данашњем свету, рачунарске мреже играју важну улогу у области преноса података. То је тема коју сваки програмер треба да зна. Под рачунарском мрежом, соцкет програмирање је једна од најважнијих тема у свету програмирања. У овој теми разматрамо програмирање сокета и различите методе програмирања утичнице које се имплементирају у Ц++.

У Ц++, програмирање сокета је метода која комбинује два или више чворова један са другим преко мреже тако да чворови могу да деле податке без икаквог губитка података. У вези са тим, један чвор слуша један порт који је повезан са одређеном ИП адресом. Када клијент дође до сервера, сервер креира слушалац утичнице.

Шта је утичница?

Хајде да разумемо утичницу говорећи пример у реалном времену. Утичница је врста медија који обезбеђује везу између два уређаја. Утичница може бити или пуњач телефона који обезбеђује везу између утичнице и телефона или телефона и тог лаптопа. Уз помоћ сокета, различите апликације се прикључују на локалну мрежу са различитим портовима. Сваки пут када се сокет креира, сервер специфицира програм, а тај програм специфицира сокет и адресу домена.

јава наследство

Утичница је врста механизма који се користи за размену података између различитих процеса. Овде су ови процеси или присутни на различитим уређајима или на истом уређају који су повезани преко мреже. Када се успостави веза за утичницу, подаци се могу послати у оба смера и наставити све док једна од крајњих тачака не затвори везу.

Програмирање сокета у Ц/Ц++

Процедура у комуникацији клијент-сервер

Постоје неке процедуре које морамо да следимо да бисмо успоставили комуникацију клијент-сервер. Ово су следеће.

    утичница:Уз помоћ утичнице можемо створити нову комуникацију.Везати:Уз помоћ овога можемо да повежемо локалну адресу са утичницом.слушај:Уз ову помоћ; можемо прихватити везу.прихватити:Уз ову помоћ; можемо блокирати долазну везу док не стигне захтев.Повежите се:Уз ову помоћ; можемо покушати да успоставимо везу.Пошаљи:Уз помоћ овога; можемо слати податке преко мреже.Прими:Уз ову помоћ; можемо да примамо податке преко мреже.Близу:Уз помоћ овога можемо ослободити везу са мреже.

Фазе за креирање серверске утичнице

Постоје неке фазе у којима можемо креирати сокет за сервер. Ово су следеће.

    инт соцкетцр:Утичница (домен, тип, протокол)Соцкетцр:То је целобројни тип, и то је као руковалац фајловима.Домен:То је комуникациони домен и целобројног је типа.Тип:То је врста комуникације.СОЦК_ДГРАМ:То је врста УДП-а која је непоуздана и без везе.Протокол:Користи се за додељивање вредности протокола за ИП адресу, која је 0. Вредност протокола је слична вредности која се појављује у пољу протокола у ИП заглављу џепа.

Шта је конекција?

Веза је врста односа између две машине где су два софтвера позната један о другом. Ова два софтвера знају како да успоставе везу један са другим; другим речима, можемо рећи да ова два софтвера знају како да пошаљу битове преко мреже. Веза утичнице значи да две машине треба да знају све информације једна о другој, као што су број телефона, ИП адреса и ТЦП порт.

јава како заобићи

Утичница је тип објекта који је сличан датотеци који дозвољава програму да прихвати долазну везу и дозволи им да пошаље или прими долазну везу. Такође, то је врста ресурса додељеног процесу сервера.

Сервер може креирати сокет уз помоћ соцкет(). Ова утичница се не може делити ни са једним другим процесором.

    Сетсоцкопт:Уз помоћ Сетсоцкопта, можемо манипулисати различитим опцијама сокета, на које се позива дескриптор датотеке сокета. Овај процес је потпуно необавезан. Уз помоћ Сетсоцкопта, можемо поново користити порт и адресу клијента и сервера. Када сервер да грешку „адреса је већ у употреби“, можемо је спречити уз помоћ Сетсоцкопта.Везати:Можемо да повежемо сокет са адресом и портом уз помоћ функције бинд. Ова операција се врши након креирања утичнице. На пример, ако покушамо да повежемо сервер са локалним хостом, онда користимо ИНАДДР_АНИ да дефинишемо ИП адресу сервера.слушај:Можемо направити утичницу за начин повезивања уз помоћ функције слушања (). Пример утичнице за начин повезивања је СОЦК_СТРЕАМ. Ово се може дефинисати аргументом соцкет. Ово се користи да прихвати долазну везу, изврши операцију чекања за долазну везу и изврши заосталу долазну везу. Када долазна веза захтева од сервера потврду, сокет се ставља у пасивни режим. Параметар заостатка сервера се односи на чињеницу да не може дозволити више од једне везе истовремено са сервером. Ако је дошло до неке долазне везе и ред је пун, онда сервер даје грешку са индикацијом 'ЕЦОННРЕФУСЕД'. Уз помоћ листен(), долазна веза је на чекању, а када је ред празан, позива све долазне везе на сервер.прихватити:Уз помоћ аццепт() системског позива; можемо направити утичницу засновану на повезивању. Неке утичнице засноване на вези су СОЦК_СТРЕАМ и СОЦК_СЕКПАЦКЕТ. Извлачи све долазне везе које прве дођу и дозвољава да њихов захтев оде на сервер. Новоповезана листа није у стању да слуша уз помоћ другог аргумента за креирање нове утичнице.

Фазе за клијента

    Веза утичнице:Потпуно је исти као и метод за креирање сервера.Повежите се:Можемо покренути везу са сокетом уз помоћ системског позива цоннецт(). Ако је параметар за сокет тип СОЦК_ДГРАМ, онда можемо дефинисати датаграм као сталан уз помоћ цоннецт(). Ако је сокет типа СОЦК_СТРЕАМ, онда можемо покушати да успоставимо другу везу за сервер. Уз помоћ функције цоннецт() такође можемо креирати везу за страну асоцијацију. Ако је утичница невезана, систем додељује јединствену вредност локалној асоцијацији. Када систем успешно обави позив, сокет је спреман да пошаље или прими било коју врсту података.Послати примити:Функције сенд() и рецв() могу да изврше операцију испод.
  • Утичница на којој се подаци могу међусобно комуницирати.
  • Бафер за складиштење може да складишти податке о адреси, као што су аддр_оф_дата и аддр_оф_буффер.
  • Бави се величином бафера, као што су лен_оф_дата и лен_оф_буффер.
  • Бави се заставицом која каже како ће подаци бити послати.

Кораци за успостављање везе у утичници

Он успоставља везу између различитих клијената и сервера. Али и клијент и сервер могу да управљају везом утичнице. Сваки процес мора да успостави везу за сопствену утичницу.

Кораци укључени у успостављање утичнице на страни клијента су следећи:

  • Он креира утичницу уз помоћ системског позива соцкет().
  • Затим морамо да се повежемо са адресом сокета сервера уз помоћ систем() позива.
  • Затим морамо послати и примити податке. То можемо учинити на различите начине. можемо да урадимо ову функцију реад() и врите().

Кораци укључени у успостављање утичнице на страни сервера су следећи:

јава једнака
  • Прво креира утичницу уз помоћ системског позива соцкет().
  • Затим везује утичницу за адресу уз помоћ бинд() системског позива. Адреса се састоји од броја порта за утичницу сервера на главној машини.
  • Затим ослушкује везу уз помоћ системског позива слушања ().
  • Затим сервер прихвата долазну везу уз помоћ аццепт() системског позива. Такође блокира све долазне команде док се клијент не повеже са сервером.
  • Тада почиње процес слања и пријема података.

Повезивање више клијената без мултитхреадинг-а

Постоје разни примери у којима видимо како се један корисник може повезати са сервером. У данашњем свету програмирања, више корисника је повезано на сервер са различитим утичницама.

Постоје различити начини да се то постигне. Један од њих је мултитхреадинг. Уз помоћ мултитхреадинга то можемо постићи. Можемо имплементирати вишенитни процес уз помоћ функције селецт().

Пример:

Код за клијента:

 // 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)>