Питхон Соцкет Трансфер Трансфер Сенд

Python Socket File Transfer Send



Намера овог чланка је да научи како пренети текстуалну датотеку преко мреже путем програма питхон . Овај пренос датотека је заснован на клијентском моделу сервера за коришћење програмирања сокета у питхон3+.

Ево основног дијаграма подешавања за покретање овог програма.









Ради једноставности у целом чланку ћемо позвати систем А као А_цлиент и систем Б као Б_сервер.



Захтеви за датотеке:

Морамо сервер.пи и ова датотека би требала бити присутна у систему сервера. У нашем случају сервер.пи би требао бити на Б_сервер систему.





Још две датотеке цлиент.пи и сампле.ткт треба да буде присутан у систему клијента. У нашем случају те две датотеке треба да буду присутне у систему А_цлиент.

Претпоставке:

Ево претпоставки:



  • Требали бисмо имати два Линук система са приступом терминалу.
  • Пожељнији укус Линука је Убунту .
  • Питхон3 треба инсталирати.
  • Оба Линук система би требало да се међусобно пингују. Употреба пинг команда за проверу пинга.
  • Један систем би требао дјеловати као сервер, а други систем као клијент у једном одређеном тренутку.

Ограничења:

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

  • Питхон3+ треба да буде инсталиран за покретање овог програма. Можда ћете приметити грешку или другачије понашање ако се покрећу на старијим верзијама питхона.
  • Кроз овај програм се тренутно може преносити само текстуална датотека. Било која друга датотека формата која не садржи текст може пропасти.
  • Основни програмски изузеци су обрађени у програму.
  • Програм може или не мора радити на другом ОС осим Убунту -а.
  • Текстуална датотека би требала бити кратка на страни клијента јер је кориштена величина бафера од 1024 бајта.

Поставите захтеве:

  • Потребан нам је најмање један Линук систем да испробамо овај програм. Али препорука је да користите два различита Линук система који су повезани мрежом.
  • Два система треба повезати преко Етхернет или Ви-Фи или било које друге везе.

Изворни код сервера:

хттпс://гитхуб.цом/линукхинтцоде/вебсамплес/блоб/мастер/питхон_сенд_филе/сервер.пи

Изворни код клијента:

хттпс://гитхуб.цом/линукхинтцоде/вебсамплес/блоб/мастер/питхон_сенд_филе/цлиент.пи

Како покренути програме и очекивани излаз:

Ево корака за извршавање програма.

Корак 1: Идите на систем Б_сервер и отворите терминал. Пречица за отварање терминала је Алт+Цтрл+т.

Корак 2: Сада идите на путању на којој је сервер.пи присутан.

Корак 3: Сада покрените сервер.пи као испод

питхон3 сервер.пи

Не би требало да буде грешака и требало би да видите отиске испод

Сервер је наведен на порту: 9898

Копирани назив датотеке ће бити рецв.ткт на страни сервера

Корак 4: Сада отворите терминал на систему А_цлиент.

Корак 5: Идите на путању на којој се налазе цлиент.пи и сампле.ткт.

Корак 6: Сада покрените цлиент.пи као испод

питхон3 клијент.пи <ИП система Б_сервера>

Уочили смо да морамо знати ИП адресу сервера. Можемо извршити наредбу испод да знамо ИП адресу Б_сервер система.

ифцонфиг

Сада би излаз А_цлиент система требао бити овакав

################### Порука испод је примљена од сервера ##################
| --------------------------------- |
Хи Цлиент[ИП адреса: 192.168.1.102],
** Добро дошли на сервер **
-Сервер
| --------------------------------- |

Корак 7: Сада идите на Б_сервер и потражите доњи излаз

Датотека је успешно копирана
Сервер је затворио конекцију

Корак 8: У фасцикли сервера требало би да постоји једно име датотеке рецв.ткт. Садржај ове датотеке рецв.ткт би требао бити исти сампле.ткт.

Тако смо успешно копирали датотеку са клијента на сервер преко мреже путем програма питхон.

Објашњења кода:

Постоје две питхон датотеке сервер.пи и цлиент.пи .

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

  1. сервер.пи:
#!/уср/бин/енв питхон3

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

Извели смо сервер.пи или цлиент.пи попут питхон3. Сада без употребе питхон3 можемо извршити питхон датотеку. Пратите наредбе испод

Идите у режим супер корисника:

његово

Дајте сву дозволу за .пи датотеку:

цхмод777сервер.пи

Покрените сервер.пи:

./сервер.пи увоз утичница
Увозутичницабиблиотеку у програм питхонкаоидемо
користитиутичница завеза.

с = утичница.утичница()

Ми стварамо објекат с за приступ свим методама утичнице. Ово је ООПс концепт.

ЛУКА= 9898

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

с.везати(('',ЛУКА))

Користимо методу везања за везивање ИП адресе сервера за тај порт [9898]. Једно запажање је да смо могли користити тачну ИП адресу сервера уместо првог аргумента методе везања, али смо изабрали да оставимо празно јер ово добро функционише.

с.везати((ИП адреса,ЛУКА))
филе = отворен('рецв.ткт', 'вб')

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

док Истина:

Почнимо са једном бесконачном вхиле петљом јер је посао сервера да сачека док клијент не комуницира са сервером на том порту 9898. Дакле, ова вхиле петља је потребна.

цонн,аддр=с.прихватити()

Овај код прихвата сваки долазни захтев за повезивање од клијента. Цонн ће користити цонн комуницирати са клијентом и аддр је ИП адреса клијента који је послао захтев за узбуну овом серверу на порту 9898.

мсг= ' н н| --------------------------------- | нЗдраво клијент [ИП адреса:
'
+ адр[0]+'], н** Добро дошли на сервер ** н-Сервер н
| --------------------------------- | н н н'

Овај код служи за креирање поруке за слање клијенту. Ову поруку треба одштампати на клијентском терминалу. Ово потврђује да клијент може комуницирати са сервером.

цонн.послати(мсг.кодирати())

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

РецвДата=цонн.рецв(1024)

Овај код прима све податке који се шаљу са стране клијента. У нашем случају очекујемо садржај сампле.ткт у РецвДата .

докРецвДата:

Још једна вхиле петља са условом РецвДата није празна. У нашем случају није празно.

филе.писати(РецвДата)

Једном кад унутра имамо садржај РецвДата онда пишемо у ту датотеку рецв.ткт помоћу показивача датотеке филе.

РецвДата=цонн.рецв(1024)

Поново покушавам да примим ако има података од клијента. Једном РецвДата нема податке код ће прекинути вхиле петљу.

филе.Близу()

Ово ће само затворити показивач на датотеку као што смо завршили са писањем датотеке.

цонн.Близу()

Ово ће прекинути везу са клијентом.

пауза

Ово ће изаћи из бесконачне вхиле петље на Б_серверу.

  1. цлиент.пи:
увоз сис

Увоз сис библиотеке по жељи користимо аргумент аргумент у питхону.

ако (лен(сис.аргв) > 1):
СерверИп= сис.аргв[1]
елсе:
принт(' н нТрчи као нпитхон3 цлиент.пи н н')
излаз(1)

Док просљеђујемо ИП адресу Б_сервера након имена датотеке цлиент.пи током рада, морамо ухватити ту ИП адресу сервера унутар клијента.

… ..Иф (лен (сис.аргв)> 1): => Да би били сигурни да корисник прослеђује бар један аргумент као ИП адресу и ухвати ту ИП адресу СерверИП.

Ако корисник не прослиједи барем један код аргумента, показује помоћ и излази из кода.

ЛУКА= 9898

Ово мора бити исти порт који је наведен на страни Б_сервер.

с.повезати((СерверИп,ЛУКА))

Овај код ће успоставити ТЦП везу са ИП сервером са тим портом. Све што није у реду на овом месту доводи до грешака у вези.

филе = отворен('сампле.ткт', 'рб')

Отварамо сампле.ткт у режиму читања да бисмо читали само садржај.

СендДата= филе.читати(1024)

Читање садржаја датотеке и стављање унутра СендДата променљива.

докСендДата:

Покрећемо једну вхиле петљу ако СендДата има податке. У нашем случају, ако сампле.ткт није празан, требало би да има податке.

с.послати(СендДата)

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

СендДата= филе.читати(1024)

Опет читам ако је нешто остало. Дакле, неће бити ништа за читање из датотеке СендДата ће бити празна и изаћи ће из вхиле петље.

с.Близу()

Ово не прекида везу са клијентске стране.

Убунту снимци екрана На страни сервера

Убунту снимци екрана Страна клијента

Тестиране комбинације:

  • Линук као сервер и Линук као клијент: ПАСС
  • Линук као клијент и Линук као сервер: ПАСС
  • Линук као сервер и Виндовс10 као клијент: ПАСС
  • Линук као клијент и Виндовс10 као сервер: ПАСС

Препорука је да користите два Линук система за сервер и клијент.

Очекиване грешке:

  1. У наставку можете видети грешку ако сервер не ради на порту 9898

Враћање назад (последњи последњи позив):

Датотека'цлиент.пи',линија22, у <модул>
с.повезати((СерверИп,ЛУКА))
ЦоннецтионРефуседЕррор:[Еррно111]конекција је одбијена
  1. Испод се види грешка ако ИП адреса није прослеђена на страни клијента

Трчи као

питхон3 клијент.пи <серверова ајпи адреса>
  1. Грешка испод се види ако је 1старгумент на страни клијента није ИП адреса

Враћање назад (последњи последњи позив):

Датотека'цлиент.пи',линија22, у <модул>
с.повезати((СерверИп,ЛУКА))
утичница.гаиеррор:[Еррно -2]Имеилиуслуганепознато
  1. Испод се види грешка ако се порт користи као 98980

Враћање назад (последњи последњи позив):

Датотека'цлиент.пи',линија22, у <модул>
с.повезати((СерверИп,ЛУКА))
ОверфловЕррор: гетсоцкаддрарг: порт мора бити0-65535.
  1. Испод се види грешка ако сампле.ткт није присутан на страни клијента.

Враћање назад (последњи последњи позив):

Датотека'цлиент.пи',линија25, у <модул>
филе = отворен('сампле.ткт', 'рб')
ФилеНотФоундЕррор:[Еррно2]Нема таквефиле илиименик:'сампле.ткт'

Закључак:

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