Питхон

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

Питхон Соцкет Филе Трансфер Сенд
Намера овог чланка је да научи како пренети текстуалну датотеку преко мреже путем програма питхон. Овај пренос датотека заснован је на клијентском моделу сервера за употребу соцкет програмирања у питхон3+.

Дијаграм основног подешавања:

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

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

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

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

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

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

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

Ограничења:

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

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

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

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

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

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

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

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

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

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

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

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

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

Сервер има списак на порту: 9898

Копираће се име датотеке.ткт на страни сервера

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

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

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

клијент питхон3.пи

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

ифцонфиг

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

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

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

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

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

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

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

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

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

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

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

Извршили смо сервер.пи или клијент.пи лике питхон3 <.py file name>. Сада без употребе питхон3 можемо извршити питхон датотеку. Следите наредбе у наставку

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

су

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

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

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

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

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

ЛУКА = 9898

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

с.бинд ((", ПОРТ))

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

с.бинд ((ИП адреса, ПОРТ))
филе = опен ("рецв.ткт "," вб ")

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

вхиле Труе:

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

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

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

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

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

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

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

РецвДата = повез.рекв (1024)

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

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

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

датотека.запис (РецвДата)

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

РецвДата = повез.рекв (1024)

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

датотека.Близу()

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

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

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

пауза

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

  1. клијент.пи:
импорт сис

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

иф (лен (сис.аргв)> 1):
СерверИп = сис.аргв [1]
иначе:
принт ("\ н \ н Покрени се као \ н питхон3 клијент.пи < serverip address > \ н \ н ")
излаз (1)

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

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

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

ЛУКА = 9898

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

с.повезивање ((СерверИп, ПОРТ))

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

филе = опен ("узорак.ткт "," рб ")

Отварамо „узорак.ткт ”у режиму читања за читање само садржаја.

СендДата = датотека.читај (1024)

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

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

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

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

Сада можемо послати садржај "узорак.ткт ” на сервер који користи соцкет објекат „С“.

СендДата = датотека.читај (1024)

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

с.Близу()

Ово није блиска веза са стране клијента.

Убунту Сцреенсхотс Сервер страна

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

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

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

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

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

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

Трацебацк (последњи последњи позив):

Датотека „клијент.пи ", ред 22, у
с.повезивање ((СерверИп, ПОРТ))
ЦоннецтионРефуседЕррор: [Еррно 111] Веза је одбијена
  1. Испод се види грешка ако ИП адреса није прослеђена на страни клијента

Трчи као

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

Трацебацк (последњи последњи позив):

Датотека „клијент.пи ", ред 22, у
с.повезивање ((СерверИп, ПОРТ))
утичница.гаиеррор: [Еррно -2] Име или услуга нису познати
  1. Испод се види грешка ако се порт користи попут 98980

Трацебацк (последњи последњи позив):

Датотека „клијент.пи ", ред 22, у
с.повезивање ((СерверИп, ПОРТ))
ОверфловЕррор: гетсоцкаддрарг: порт мора бити 0-65535.
  1. Испод се види грешка ако „узорак.ткт ”није присутан на страни клијента.

Трацебацк (последњи последњи позив):

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

Закључак:

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

Како развити игру на Линуку
Пре деценију, није много корисника Линука предвидело да ће њихов омиљени оперативни систем једног дана бити популарна платформа за играње комерцијални...
Портови комерцијалних игара отвореног кода
Бесплатне рекреације покретачких игара са отвореним кодом и више платформи могу се користити за играње старих, као и неких прилично недавних наслова и...
Најбоље игре командне линије за Линук
Командна линија није само ваш највећи савезник када користите Линук - она ​​такође може бити извор забаве јер је можете користити за играње многих заб...