Шта је Соцкет програмирање у Питхону и како га савладати?



Сазнајте шта је Соцкет програмирање у Питхону, заједно са комуникацијом клијент-сервер, заједно са преносом питхон објеката помоћу туршија и утичница.

Интернет је несумњиво постао „Душа постојања“ и његову активност карактеришу „Везе“ или „Мреже“. Ове мреже су омогућене коришћењем једне од најважнијих основа Утичнице. Овај чланак покрива сва подручја која се баве програмирањем сокета у Питхону. Утичнице вам помажу док не успоставите ове везе , несумњиво, олакшава.

Погледајмо на брзину све теме обрађене у овом чланку:





Зашто користити утичнице?
Шта су Соцкетс у Питхону?
Како постићи соцкет програмирање у Питхону
Шта је сервер?
Шта је клијент?
Ецхо Цлиент-Сервер
Вишеструке комуникације
Пренос Питхон објеката



Зашто користити утичнице?

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

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

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

Уопштено говорећи, утичнице су унутрашње крајње тачке направљене за слање и примање података. Једна мрежа имаће две утичнице, по једну за сваки комуникациони уређај или програм. Ове утичнице су комбинација ИП адресе и порта. Појединачни уређај може да има „н“ број утичница на основу броја порта који се користи. За различите типове протокола доступни су различити портови. Погледајте следећу слику да бисте сазнали више о неким уобичајеним бројевима прикључака и повезаним протоколима:




уобичајени портови-СоцкетПрограммингинПитхон-Едурека

Сад кад вам је јасан концепт сокета, погледајмо сада Соцкет модул Питхона:

Како постићи Соцкет програмирање у Питхону:

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

Неке од важних метода су следеће:

МетодеОпис

соцкет.соцкет ()

користи се за стварање утичница (потребно је и на серверу и на клијентским крајевима за стварање утичница)

соцкет.аццепт ()

некада прихватао везу. Враћа пар вредности (цонн, адреса) где је цонн нови сокетни објекат за слање или примање података, а адреса је адреса утичнице присутна на другом крају везе

соцкет.бинд ()

користи се за везивање за адресу која је наведена као параметар

соцкет.цлосе ()

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

соцкет.цоннецт ()

користи се за повезивање са удаљеном адресом која је наведена као параметар

соцкет.листен ()

омогућава серверу да прихвати везе

Сада када сте схватили важност соцкет модула, идемо даље да видимо како он може да послужи за креирање сервера и клијената за Соцкет програмирање у .

Шта је сервер?

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

Сервери обично користе методе попут соцкет.соцкет (), соцкет.бинд (), соцкет.листен () итд. Да би успоставили везу и везали се за клијенте. Сада напишимо програм за креирање сервера. Размотрите следећи пример:

ПРИМЕР:

импорт соцкет с = соцкет.соцкет (соцкет.АФ_ИНЕТ, соцкет.СОЦК_СТРЕАМ) с.бинд ((соцкет.гетхостнаме (), 1234)) # број порта може бити било шта између 0-65535 (обично одређујемо не привилеговане портове који су > 1023) с.листен (5) вхиле Труе: цлт, адр = с.аццепт () принт (ф'Цоннецтион то {адр} успостављен ') #ф стринг је дословни низ са префиксом ф који # садржи питхон изразе у заградама цлт .сенд (бајтови ('Програмирање сокета у Питхону', 'утф-8')) # за слање информација на цлиентоцкет

Као што видите, прва потреба за креирањем утичнице је увоз модула утичнице. Након тога се метода соцкет.соцкет () користи за креирање сокета на страни сервера.

БЕЛЕШКА:

разлика између финал коначно и финализирати

АФ_ИНЕТ се односи на адресу са Интернета и потребан му је пар (хост, порт) где домаћин може бити УРЛ неке одређене веб локације или његова адреса, а број порта је цео број. СОЦК_СТРЕАМ се користи за креирање ТЦП протокола.

Метода бинд () прихвата два параметра као скуп (хост, порт). Међутим, боље је користити четвороцифрени број порта јер су доњи обично заузети. Метода Листен () омогућава серверу да прихвати везе. Овде је 5 ред за више веза које се истовремено појављују. Минимална вредност која се овде може навести је 0 (Ако дате мању вредност, она се мења на 0). У случају да није наведен параметар, потребан је подразумевани одговарајући параметар.

Тхе омогућава прихватање веза заувек. „Цлт“ и „адр“ су објект и адреса клијента. Изјава за испис само исписује адресу и број порта клијентске утичнице. Коначно, цлт.сенд се користи за слање података у бајтовима.

Сада када је наш сервер постављен, идемо даље према клијенту.

Шта је клијент?

Клијент је рачунар или софтвер који прима информације или услуге од сервера. У модулу клијент-сервер, клијенти захтевају услуге од сервера. Најбољи пример је веб прегледач као што је Гоогле Цхроме, Фирефок итд. Ови веб прегледачи захтевају веб сервере за потребне веб странице и услуге према упутствима корисника. Остали примери укључују онлајн игре, ћаскање на мрежи итд.

Сада погледајмо како кодирати програм на страни клијента :

ПРИМЕР:

импорт соцкет с = соцкет.соцкет (соцкет.АФ_ИНЕТ, соцкет.СОЦК_СТРЕАМ) с.цоннецт ((соцкет.гетхостнаме (), 2346)) мсг = с.рецв (1024) принт (мсг.децоде ('утф-8') )

Први корак је увоз модула соцкет, а затим креирање сокета баш као што сте то радили приликом креирања сервера. Затим, да бисте креирали везу између клијент-сервера, мораћете да користите методу цоннецт () навођењем (хост, порт).


БЕЛЕШКА: гетхостнаме се користи када су клијент и сервер укључени на истом рачунару. (ЛАН - локалип / ВАН - публицип)

Овде клијент жели да прими неке информације од сервера и за то треба да користите метод рецв () и информације се чувају у другој променљивој поруци. Само имајте на уму да ће информације које се преносе бити у бајтовима, а клијент у горе наведеном програму може примити до 1024 бајта (величина међуспремника) у једном преносу. Може се одредити на било који износ, у зависности од количине података који се преносе.

На крају, поруку која се преноси треба декодирати и одштампати.

Сада када сте свесни како да креирате програме клијент-сервер, идемо даље да видимо како их треба извршити.

Ецхо Цлиент-Сервер:

Да бисте извршили ове програме, отворите командну линију, уђите у фасциклу у којој сте креирали програм клијента и сервера, а затим откуцајте:

пи сервер.пи (овде је сервер.пи име датотеке сервера, такође можете користити пи -3.7 сервер.пи)

Када се то уради, сервер почиње да се покреће. Да бисте извршили клијента, отворите други цмд прозор и откуцајте:

пи цлиент.пи (овде цлиент.пи је име датотеке клијента)

ИЗЛАЗ (СЕРВЕР):

(КЛИЈЕНТ)

Покушајмо са истим програмом тако што ћемо смањити величину бафера на 7 и видети какав ћемо излаз добити:

ИЗЛАЗ:

сортирај низ ц ++ узлазно

Као што видите, веза се прекида након преноса 7 бајтова. Али ово је проблем јер нисте добили комплетне информације и веза је прекинута. Идемо даље да решавамо ово питање.

Вишеструке комуникације:

Да би веза трајала све док клијент не добије комплетне информације, можете користити вхиле петљу:

ПРИМЕР:

импорт соцкет с = соцкет.соцкет (соцкет.АФ_ИНЕТ, соцкет.СОЦК_СТРЕАМ) с.цоннецт ((соцкет.гетхостнаме (), 2346)) вхиле Труе: мсг = с.рецв (7) принт (мсг.децоде ('утф- 8 '))

Једном када то урадите, комплетна порука ће се примити у 7 бајтова по преносу.

Али овог пута, као што видите, веза се не прекида и никад не знате када ће се то догодити. И да додамо још ово, шта ако заправо не знате колика је порука или информација коју ће клијент добити од сервера. У таквим случајевима заправо можете да користите следећи бит кода на страни клијента:

ПРИМЕР:

цомплете_инфо = '' вхиле Труе: мсг = с.рецв (7) иф лен (мсг)<=0: break complete_info += msg.decode('utf-8') print(complete_info) 

На страни сервера користите методу цлосе () на следећи начин:

цлт.цлосе ()

Резултат ће бити као што је приказано на доњој слици:

ИЗЛАЗ:



Све што горе наведени блок кода ради је провера величине података и њихово штампање у међуспремнику од два бајта одједном плус затварање везе након што је завршена.

Пренос Питхон објеката:

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

Питхон кисели модул:

Питхон пицкле модул се појављује у слици када заправо сериализујете или уклањате сериализацију објеката у питхону. Погледајмо мали пример,

ПРИМЕР:

импорт пицкле милист = [1,2, 'абц'] мимсг = пицкле.думпс (милист) принт (мимсг)

ИЗЛАЗ: б’к80к03] кк00 (Кк01Кк02Кск03к00к00к00абцкк01е. ’

Као што видите, у горњем програму се „милист“ сериализује помоћу функције думпс () модула туршија. Такође забележите да излаз почиње са „б“, што значи да се претвара у бајтове. У програмирању сокета, овај модул можете применити за пренос питхон објекти између клијената и сервера.

Како се користи пицкле модул за пренос питхон објектних структура?

Када користите туршију заједно са утичницама, апсолутно можете све пребацити преко мреже. Запишимо пандане на страни сервера и на страни клијента за пренос листе са сервера на клијента:

На страни сервера:

импорт соцкет импорт пицкле а = 10 с = соцкет.соцкет (соцкет.АФ_ИНЕТ, соцкет.СОЦК_СТРЕАМ) с.бинд ((соцкет.гетхостнаме (), 2133)) #биндинг тупле с.листен (5) вхиле Труе: цлт, адр = с.аццепт () принт (ф'Повезивање на {адр} успостављено ') м = {1:' Клијент ', 2:' Сервер '} мимсг = пицкле.думпс (м) # порука коју желимо да одштампамо касније мимсг = {лен (мимсг): {а}} 'утф-8') + мимсг цлт.сенд (мимсг)

Овде је м речник који је у основи а који треба послати са сервера клијенту. То се постиже тако што се објекат прво сериализује помоћу думпс-а (), а затим претвори у бајтове.
Запишите сада пандан на страни клијента:

На страни клијента:

импорт соцкет импорт пицкле а = 10 с = соцкет.соцкет (соцкет.АФ_ИНЕТ, соцкет.СОЦК_СТРЕАМ) с.цоннецт ((соцкет.гетхостнаме (), 2133)) вхиле Труе: цомплете_инфо = б '' рец_мсг = Труе вхиле Труе: мимсг = с.рецв (10) ако је рец_мсг: принт (ф'Дужина поруке = {мимсг [: а]} ') к = инт (мимсг [: а]) рец_мсг = Фалсе цомплете_инфо + = мимсг иф лен (цомплете_инфо) -а == к: принт ('Примили комплетне информације') принт (цомплете_инфо [а:]) м = пицкле.лоадс (цомплете_инфо [а:]) принт (м) рец_мсг = Труе цомплете_инфо = б '' принт (цомплете_инфо )

Прва вхиле петља ће нам помоћи да пратимо комплетну поруку (цомплете_инфо) као и поруку која се прима (рец_мсг) помоћу бафера. поруку подешавањем рец_
Затим, док се порука прима, све што радим је да штампам сваки њен делић, примам у бафер величине 10. Ова величина може бити било која у зависности од вашег личног избора.

Затим, ако је примљена порука једнака целој поруци, само штампам поруку као примљену комплетну информацију, након чега сам десериализовао поруку помоћу лоад ().

Излаз за горњи програм је следећи:

Ово нас доводи до краја овог чланка о Програмирању сокета у Питхону. Надам се да сте јасно разумели све концепте.

Обавезно вежбајте што је више могуће и вратите своје искуство.

Имате питање за нас? Молимо вас да га помињете у одељку за коментаре овог блога „Програмирање сокета у Питхону“ и јавићемо вам се што је пре могуће.

Да бисте стекли детаљно знање о Питхону, заједно са разним апликацијама, можете се пријавити за уживо са 24/7 подршком и доживотним приступом.