Основна диаграма за настройка:
Ето основната схема за настройка за стартиране на тази програма.
За простота ще наричаме система A като A_client и система B като B_server в цялата статия.
Изисквания към файла:
Имаме нужда от сървър.py и този файл трябва да присъства в сървърната система. В нашия случай сървър.py трябва да бъде в системата B_server.
Още два файла клиент.py и проба.текст трябва да присъства в клиентската система. В нашия случай тези два файла трябва да присъстват в системата A_client.
Предположения:
Ето предположенията:
- Трябва да имаме две Linux системи с терминален достъп.
- За предпочитане е вкусът на Linux Ubuntu.
- Python3 трябва да бъде инсталиран.
- И двете системи на Linux трябва да могат да пинг взаимно. Използвайте пинг
команда за проверка на ping. - Една система трябва да действа като сървър, а друга система да действа като клиент в даден момент.
Ограничения:
Преди да продължим по-нататък, трябва да знаем, че има някои ограничения на тази програма.
- Python3 + трябва да бъде инсталиран за стартиране на тази програма. Може да наблюдавате грешка или различно поведение, ако се изпълнява на по-стари версии на python.
- Отсега през тази програма може да се прехвърля само текстов файл. Всеки друг формат, който не съдържа текст, може да се провали.
- В програмата са обработени основните изключения при програмиране.
- Програмата може или не може да работи на друга операционна система, различна от Ubuntu.
- Текстовият файл трябва да е кратък от страна на клиента, тъй като е използван размер на буфера от 1024 байта.
Задайте изисквания:
- Нуждаем се от поне една Linux система, за да изпробваме тази програма. Но препоръката е да се използват две различни Linux системи, които са свързани чрез мрежа.
- Две системи трябва да бъдат свързани чрез Ethernet или Wi-Fi или всякакви други връзки.
Изходен код на сървъра:
https: // github.com / linuxhintcode / websamples / blob / master / python_send_file / server.py
Изходен код на клиента:
https: // github.com / linuxhintcode / websamples / blob / master / python_send_file / client.py
Как да стартирате програми и очаквана продукция:
Ето стъпките за изпълнение на програмата.
Стъпка 1: Отидете до системата B_server и отворете терминал. Кратък път за отваряне на терминал е Alt + Ctrl + t.
Стъпка 2: Сега отидете по пътя, където сървър.py присъства.
Стъпка 3: Сега стартирайте сървър.py като по-долу
python3 сървър.pyНе трябва да има грешки и трябва да видите отпечатъци по-долу
Сървърът е в списъка на порт: 9898Копираното име на файл ще бъде възстановено.txt от страна на сървъра
Стъпка 4: Сега отворете терминал в системата A_client.
Стъпка5: Отидете до пътя, където клиентът.py и проба.txt присъстват.
Стъпка 6: Сега стартирайте клиента.py като по-долу
клиент на python3.pyЗабелязахме, че трябва да знаем IP адреса на сървъра. Можем да изпълним командата по-долу, за да знаем IP адреса на системата B_server.
ifconfig
Сега изходът на системата A_client трябва да бъде такъв
################### По-долу се получава съобщение от сървъра ###################| --------------------------------- |
Здравей, клиент [IP адрес: 192.168.1.102],
** Добре дошли в сървъра **
-Сървър
| --------------------------------- |
Стъпка 7: Сега отидете на B_server и потърсете по-долу изход
Файлът е копиран успешноСървърът затвори връзката
Стъпка 8: Трябва да има едно име на файл recv.txt в папката на сървъра. Съдържанието на тази препоръка.txt трябва да бъде същата проба.текст.
Така че успешно копирахме файл от клиент на сървър през мрежа чрез програма python.
Обяснения на кода:
Има два python файла сървър.py и клиент.py.
Имайте предвид, че ще обясним веднъж дали някой код е същият вътре в сървъра.py и клиент.py.
- сървър.py:
Това е shebang линия, което означава по подразбиране този сървър.py трябва да използва python3. Нека видим едно предимство на тази линия.
Изпълнихме сървъра.py или клиент.py харесвам python3 <.py file name>. Сега, без да използваме python3, можем да изпълним файла python. Следвайте командите по-долу
Отидете в супер потребителски режим:
суДайте на всички разрешение .py файл:
chmod 777 сървър.pyСтартирайте сървър.py:
./ сървър.py сокет за импортиранеИмпортиране на библиотека на сокети в програмата на python, както вървим
за да използвате гнездо за връзка.
s = гнездо.гнездо ()
Ние създаваме обект "с" за достъп до всички методи на сокет. Това е концепция за ООП.
ПОРТ = 9898Сега избираме един порт, където сървърът ще слуша. Вместо това можем да използваме нерезервиран порт.
с.bind ((", PORT))Използваме метод bind, за да обвържем ip адреса на сървъра към този порт [9898]. Едно наблюдение е, че бихме могли да използваме точния IP адрес на сървъра вместо първия аргумент на метода на обвързване, но избираме да оставим празно, тъй като това работи добре.
с.bind ((IP адрес, PORT))файл = отворен ("рев.txt "," wb ")
Отворихме едно име на файл „recv.txt ”в сървър за режим на запис и има указател на файл. Това се изисква, тъй като трябва да копираме един текстов файл от клиента.
докато е вярно:Нека започнем един безкраен цикъл while, тъй като работата на сървъра е да изчакаме, докато клиентът комуникира със сървъра на този 9898 порт. Така че този цикъл while е необходим.
conn, addr = s.приемете ()Този код е за приемане на всяка входяща заявка за връзка от клиента. Кон ще използва „кон да комуникира с клиент и „Адрес“ е IP адресът на клиент, изпратил заявка за суматоха до този сървър на порт 9898.
msg = "\ n \ n | --------------------------------- | \ n Здравейте клиент [IP адрес:"+ addr [0] +"], \ n ** Добре дошли в сървъра ** \ n -Сървър \ n
| --------------------------------- | \ n \ n \ n "
Този код е за създаване на съобщение за изпращане до клиента. Това съобщение трябва да бъде отпечатано на клиентския терминал. Това потвърждава, че клиентът може да комуникира със сървъра.
конн.изпращане (съобщ.encode ())Сега сме готови за съобщението и след това го изпращаме на клиента, използвайки това „Свързване“. Този код всъщност изпраща съобщение до клиента.
RecvData = свързване.рекв. (1024)Този код получава всички данни, изпратени от страна на клиента. В нашия случай очакваме съдържанието на пробата.txt в “RecvData”.
докато RecvData:Още един цикъл while с условие RecvData не е празен. В нашия случай не е празно.
файл.запис (RecvData)След като имаме съдържание вътре “RecvData” тогава пишем в този файл „Препоръч.текст" с помощта на указател на файл „Файл“.
RecvData = свързване.рекв. (1024)Отново се опитвам да получа, ако има данни от клиента. Веднъж “RecvData” няма данни кодът ще прекъсне цикъла while.
файл.близо()Това просто ще затвори показалеца на файла, когато приключим с писането на файл.
конн.близо()Това ще затвори връзката с клиента.
почивкаТова трябва да излезе от безкраен цикъл while при B_server.
- клиент.py:
Импортиране на sys библиотека, както искаме, използвайте аргументация в python.
if (len (sys.argv)> 1):ServerIp = sys.argv [1]
друго:
print ("\ n \ n Стартирайте като \ n python3 клиент.py < serverip address > \ n \ n ")
изход (1)
Докато предаваме IP адреса на B_server след клиент с име на файл.py, докато работим, трябва да хванем този IP адрес на сървъра вътре в клиента.
... if (len (sys.argv)> 1): => За да сте сигурни, че потребителят предава поне един аргумент като IP адрес и да хване този IP адрес в “ServerIP”.
Ако потребителят не предаде поне един код на аргумент, показва помощ и излиза от кода.
ПОРТ = 9898Това трябва да е същият порт, както е споменато от страна на B_server.
с.свързване ((ServerIp, PORT))Този код ще направи TCP връзка към IP на сървъра с този порт. Всичко, което не е наред в този момент, води до неуспехи във връзка.
файл = отворен ("пример.txt "," rb ")Отваряме „проба.txt ”в режим на четене, за да се чете само съдържание.
SendData = файл.четене (1024)Четене на съдържанието на файла и поставяне вътре “SendData ” променлива.
докато SendData:Започваме цикъл one while, ако „SendData ” има данни. В нашия случай, ако „проба.txt ”не е празно, трябва да има данни.
с.изпрати (SendData)Сега можем да изпращаме съдържание на „Проба.текст" към сървър, използващ сокет обект "с".
SendData = файл.четене (1024)Отново четене дали е останало нещо. Така че няма да има какво да се чете от файла “SendData” ще бъде празно и ще излезе от while цикъл.
с.близо()Това не затваря връзката от страна на клиента.
Ubuntu Screenshots Сървърна страна
Ubuntu Screenshots Клиентска страна
Тествани комбинации:
- Linux като сървър и Linux като клиент: PASS
- Linux като клиент и Linux като сървър: PASS
- Linux като сървър и Windows10 като клиент: PASS
- Linux като клиент и Windows10 като сървър: PASS
Препоръката е да се използват две Linux системи за сървър и клиент.
Очаквани грешки:
- Можете да видите по-долу грешка, ако сървърът не работи на 9898 порт
Traceback (последно последно обаждане):
Файл "клиент.py ", ред 22, вс.свързване ((ServerIp, PORT))
ConnectionRefusedError: [Errno 111] Връзката е отказана
- По-долу се вижда грешка, ако IP адресът не е предаден от страна на клиента
Тичай като
клиент на python3.py < serverip address >- По-долу се вижда грешка, ако 1ул аргумент от страна на клиента не е IP адрес
Traceback (последно последно обаждане):
Файл "клиент.py ", ред 22, вс.свързване ((ServerIp, PORT))
гнездо.gaierror: [Errno -2] Име или услуга не са известни
- По-долу се вижда грешка, ако портът се използва като 98980
Traceback (последно последно обаждане):
Файл "клиент.py ", ред 22, вс.свързване ((ServerIp, PORT))
OverflowError: getsockaddrarg: портът трябва да е 0-65535.
- По-долу се вижда грешка, ако „проба.txt ”не присъства от страна на клиента.
Traceback (последно последно обаждане):
Файл "клиент.py ", ред 25, вфайл = отворен ("пример.txt "," rb ")
FileNotFoundError: [Errno 2] Няма такъв файл или директория: 'sample.текст'
Заключение:
Използвайки тази програма, ние можем да изпратим прост текстов файл от една система на друга система чрез мрежа, използвайки програмата python. Това ни дава основно обучение за програмиране на python и socket също за изпращане на данни през мрежата.