Программа, иллюстрирующая механизмы использования сокетов
Разработка программы типа клиент-сервер на языке программирования Python, являющейся автоматическим сервисом поиска контактной информации о пользователях. Применение дейтаграммных и потоковых сокетов. Блок-схема работы программы, руководство пользователя.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 24.04.2015 |
Размер файла | 222,0 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
МИНОБР НАУКИ РФ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
"ЮЖНЫЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ"
ТЕХНОЛОГИЧЕСКИЙ ИНСТИТУТ
ЮЖНОГО ФЕДЕРАЛЬНОГО УНИВЕРСИТЕТА В г. ТАГАНРОГЕ
Факультет информационной безопасности
Курсовая работа
"Программа, иллюстрирующая механизмы использования сокетов"
"Вычислительные сети"
Таганрог - 2014
Оглавление
Введение
1. Теоретическая справка
2. Блок-схема работы программы
3. Руководство программиста
4. Руководство пользователя
Заключение
Список использованной литературы
Приложение
программа сокет потоковый дейтаграммный
Введение
Сокеты представляют собой чрезвычайно удобную, но в то же время плохо понятую технологию взаимодействия между двумя процессами в сети. Эти процессы могут существовать на одной и той же машине, общаясь друг с другом через локальный сокет, предназначенный для взаимодействия между процессами, либо на разных машинах через Internet.
Сокет -- это один конец двустороннего канала связи между двумя программами, работающими в сети. Соединяя вместе два сокета, можно передавать данные между разными процессами (локальными или удаленными). Реализация сокетов обеспечивает инкапсуляцию протоколов сетевого и транспортного уровней.
Целью данной работы была разработка программы типа клиент-сервер на языке программирования Python, являющейся автоматическим сервисом поиска контактной информации о пользователях некоторой компании. Необходимо, чтобы клиент вводил запрос в виде фамилии пользователя, а ему автоматически приходил ответ с сервера. Через поиск ключевого слов в запросе нужно осуществить систему подбора ответов, и в зависимости от ключевого слова осуществить отправку ответа клиенту. Программа должна принимать запросы неограниченное количество раз, уведомлять клиента, если запрос был введен неправильно. Реализовать завершение работы с программой.
1. Теоретическая справка
Сокет - это конечная точка соединения, уникальная для отдельного процесса приложения, работающего на отдельном узловом устройстве. Пара сокетов состоит из IP - адресов источника и адресата и номеров портов. Номера порта источника и порта назначения записываются в сегмент. Затем эти сегменты инкапсулируются в пакете IP. В пакете IP записывается IP-адрес источника и назначения.
Интерфейс IPC для взаимодействия между разными процессами построен поверх методов ввода-вывода. Они облегчают для сокетов отправку и получение данных. Каждый целевой объект задается адресом сокета, следовательно, этот адрес можно указать в клиенте, чтобы установить соединение с целью.
Хотя существует множество типов сокетов, все функции сокетов основаны на одном и том же базовом принципе -- получении данных программой В от программы А. Эти программы могут работать на одной и той же машине с применением межпроцессного взаимодействия, либо на удаленных машинах (таких как Web-сервер и браузеры).
Сокеты могут быть надежными (потоковыми), выполняющими все необходимое для обеспечения передачи данных из точки А в точку В (TCP), либо ненадежными (дейтаграммными), когда данные передаются без гарантии доставки(UDP).
Потоковый сокет -- это сокет с установленным соединением, состоящий из потока байтов, который может быть двунаправленным, т, е. через эту конечную точку приложение может и передавать, и получать данные.
Потоковый сокет гарантирует исправление ошибок, обрабатывает доставку и сохраняет последовательность данных. На него можно положиться в доставке упорядоченных, сдублированных данных. Потоковый сокет также подходит для передачи больших объемов данных, поскольку накладные расходы, связанные с установлением отдельного соединения для каждого отправляемого сообщения, может оказаться неприемлемым для небольших объемов данных. Потоковые сокеты достигают этого уровня качества за счет использования протокола Transmission Control Protocol (TCP). TCP обеспечивает поступление данных на другую сторону в нужной последовательности и без ошибок.
Для этого типа сокетов путь формируется до начала передачи сообщений. Тем самым гарантируется, что обе участвующие во взаимодействии стороны принимают и отвечают. Если приложение отправляет получателю два сообщения, то гарантируется, что эти сообщения будут получены в той же последовательности.
Однако, отдельные сообщения могут дробиться на пакеты, и способа определить границы записей не существует. При использовании TCP этот протокол берет на себя разбиение передаваемых данных на пакеты соответствующего размера, отправку их в сеть и сборку их на другой стороне. Приложение знает только, что оно отправляет на уровень TCP определенное число байтов и другая сторона получает эти байты. В свою очередь TCP эффективно разбивает эти данные на пакеты подходящего размера, получает эти пакеты на другой стороне, выделяет из них данные и объединяет их вместе.
Потоки базируются на явных соединениях: сокет А запрашивает соединение с сокетом В, а сокет В либо соглашается с запросом на установление соединения, либо отвергает его.
Если данные должны гарантированно доставляться другой стороне или размер их велик, потоковые сокеты предпочтительнее дейтаграммных. К примеру, сервер электронной почты является приложением, которое должно доставлять содержание в правильном порядке, без дублирования и пропусков.
Дейтаграммные сокеты иногда называют сокетами без организации соединений, т. е. никакого явного соединения между ними не устанавливается -- сообщение отправляется указанному сокету и, соответственно, может получаться от указанного сокета.
Потоковые сокеты по сравнению с дейтаграммными действительно дают более надежный метод, но для некоторых приложений накладные расходы, связанные с установкой явного соединения, неприемлемы (например, сервер времени суток, обеспечивающий синхронизацию времени для своих клиентов). В конце концов на установление надежного соединения с сервером требуется время, которое просто вносит задержки в обслуживание, и задача серверного приложения не выполняется. Для сокращения накладных расходов нужно использовать дейтаграммные сокеты.
Использование дейтаграммных сокетов требует, чтобы передачей данных от клиента к серверу занимался User Datagram Protocol (UDP). В этом протоколе на размер сообщений налагаются некоторые ограничения, и в отличие от потоковых сокетов, умеющих надежно отправлять сообщения серверу-адресату, дейтаграммные сокеты надежность не обеспечивают. Если данные затерялись где-то в сети, сервер не сообщит об ошибках.
Кроме двух рассмотренных типов существует также обобщенная форма сокетов, которую называют необрабатываемыми или сырыми. Главная цель использования сырых сокетов состоит в обходе механизма, с помощью которого компьютер обрабатывает TCP/IP. Это достигается обеспечением специальной реализации стека TCP/IP, замещающей механизм, предоставленный стеком TCP/IP в ядре -- пакет непосредственно передается приложению и, следовательно, обрабатывается гораздо эффективнее, чем при проходе через главный стек протоколов клиента.
По определению, сырой сокет -- это сокет, который принимает пакеты, обходит уровни TCP и UDP в стеке TCP/IP и отправляет их непосредственно приложению.
При использовании таких сокетов пакет не проходит через фильтр TCP/IP, т.е. никак не обрабатывается, и предстает в своей сырой форме. В таком случае обязанность правильно обработать все данные и выполнить такие действия, как удаление заголовков и разбор полей, ложится на получающее приложение -- все равно, что включить в приложение небольшой стек TCP/IP.
Сырые сокеты главным образом используются при разработке специализированных низкоуровневых протокольных приложений. Например, такие разнообразные утилиты TCP/IP, как trace route, ping или arp, используют сырые сокеты.
Сокеты также бывают "блокирующими" и "неблокирующими". Блокирующие сокеты заставляют ваше приложение ожидать до тех пор, пока данные станут доступны, в то время как неблокирующие сокеты этого не делают. Хотя все сокеты двунаправлены, все же существует разница между сокетами клиента и сервера. Серверный сокет прослушивает определенный порт, а клиентский подключается к серверу. После того, как было установлено соединение начинается обмен данными.
Рис.1 Модель "Клиент-сервер"
2. Блок-схема работы программы
Работа программы автоматического сервиса поиска может быть представлена в виде блок-схемы, реализованной как результат взаимодействия пользователя с программой.
Пользователь начинает работу с программой последовательно запустив два файла "server1.py" и "client1.py". Это действие представлено блоком "Запустить программу"
В окне клиента пользователю предлагается ввести ключевое слово поиска (фамилию).Данное действие выглядит как блок "Введите фамилию".
После этого программа осуществляет проверку введенных данных на наличие их в базе. Этот блок условия представлен как "Найден ли результат?".
Если результат не найден ("Нет"), то программа сообщает об отсутствии данных в базе и пользователь может повторить попытку.
Если результат найден ("Да"), то программа выводит его в окне клиента. Пользователь может продолжить поиск. На блок-схеме это условие выглядит как "Продолжить работу с программой?". Если пользователь продолжает поиск ("Да"), необходимо ввести следующее ключевое слово поиска(Фамилию). Если поиск нужно прекратить("Нет"), в окне сервера пользователь вводит слово "Выйти", тем самым прекращая работу сервиса.
Рис.2. Блок-схема.
3. Руководство программиста
В данной работе разработка программы выполнена на языке PYTHON в среде программирования PyCharm.2.7.3. Код программы можно условно разделить на несколько основных логических модулей.
1. В Python для работы с сокетами используется библиотека socket. С подключения этой библиотеки начинается код как сервера, так и клиента.
2. Создание сокета. По примеру - sock = socket.socket(). Эта часть является так же общей как для клиентского, так и для серверного приложений.
3.Обозначение хоста и порта сервера. Этот этап осуществляется с помощью метода
Bind() - он связывает сокет с локальной конечной точкой для ожидания входящих запросов на соединение. В качестве параметра метод принимает хост и порт.
4.Установка соединения реализуется с помощью нескольких методов: Listen() - помещает сокет в режим прослушивания (ожидания). Этот метод предназначен только для серверных приложений. В качестве параметра метод принимает возможное число подключений. Метод Accept() создает новый сокет для обработки входящего запроса на соединение. Connect() - Устанавливает соединение с удаленным хостом.
Благодаря методу Raw_input () клиент вводит данные с клавиатуры и результат ввода присваивается некоторой переменной.А метод Send() отправляет данные соединенному сокету.
5.Прием данных от клиента и обработка запроса. Этот программный модуль реализуется при помощи метода Recv() - получает данные от соединенного сокета, в качестве аргумента принимает количество байт для чтения. Мы будем читать порциями по 1024 байт (или 1 кб). Чтобы открыть файл (базу данных) для чтения, необходимо использовать метод Open(). В качестве параметра ему передается имя открываемого файла и режим чтения.
6. При помощи метода find() мы можем проверить вхождение подстроки переданной в качестве параметра в проверяемой строке.
7. Метод close() закрывает соединение.
4. Руководство пользователя
Для того, чтобы начать работу с программой необходимо последовательно запустить файлы "server1.py" и "client1.py" в среде программирования PyCharm.2.7.3. Это можно сделать, нажав правой кнопкой мыши на соответствующую вкладку, и, выбрав действие"Run".
После этого должно открыться окно:
2.Далее пользователь может ввести ключевое слово поиска (Фамилию).
3.Если в базе нет данных, сервер вернет данное сообщение.
4.Чтобы прекратить работу с сервисом необходимо ввести "Выйти".
Заключение
Компьютерный мир глобализируется на основе сетевых коммуникаций и протоколов. Интернет становится обязательным атрибутом повседневности. Все больше появляется приложений, ориентированных на сеть: это серверы баз данных, сетевые игры, различные сетевые протоколы, Web-серверы, апплеты, сервлеты, CGI-скрипты и т.д. Становится необходимым глубокое изучение сетевого программирования.
В ходе создания данной программы я проиллюстрировала принцип работы сокетов с помощью программы автоматического сервера поиска, ознакомилась с языком программирования Python. Данная работа помогла мне закрепить теоретические знания в области вычислительных сетей и открыть для себя новые методы программирования.
Список использованной литературы
1. Марк Пилгрим "Вглубь языка Python" , 2002
2. Бизли. Д "Python. Подробный справочник" , 2010
Приложение
Программа серверного приложения:
import socket
sock = socket.socket()
sock.bind(('', 9854))
sock.listen(1)
connect, adr = sock.accept()
connect.send('Введите фамилию:')
c=1
while c==1
data = connect.recv(1024)
записывает в переменную data
if data=='выйти':
c=2
connect.send('Сервис закрыт.')
connect.close()
break
f = open('text.txt','r')
count=0
count1=0
for line in f:
if count1==0:
count1=1
continue
if line.find(data)!=-1:
connect.send(line[0:len(line)-1:1])
count=0
break
else:
count=1
if count==1:
connect.send('Пользователь отсутствует в базе.')
f.close()
Программа клиентского приложения:
import socket
sock = socket.socket()
sock.connect(('localhost', 9854))
data1 = sock.recv(1024)
print data1
c=1
while c==1:
inp=raw_input()
if inp=='выйти':
c=2;
sock.send(inp)
data = sock.recv(1024)
print data
Размещено на Allbest.ru
Подобные документы
Архитектура клиент-сервер на основе сокетов Windows. Описание утилиты Ipconfig. Конфигурирование стека TCP/IP. Реализация сокетов через классы NET. Структура библиотечных и пользовательских классов. Схема интерфейса пользователя и работы приложения.
курсовая работа [419,5 K], добавлен 13.12.2012Сетевое программное обеспечение: общее понятие, содержание, функции. Этапы развития теории компьютерных сетей. Проектирование в среде программирования Borland Builder C++ клиент серверного приложения с использованием сокетов, листинг данной программы.
курсовая работа [191,5 K], добавлен 07.01.2015Разработка программы на языке Turbo Pascal, обеспечивающей работу пользователя в диалоговом режиме с возможностью выбора функций с помощью одноуровневого меню вертикального типа. Блок-схема и листинг программы, описание руководства пользователя.
курсовая работа [1,5 M], добавлен 17.03.2014Написание программы, состоящей из двух модулей и реализующей простейший калькулятор. Разработка алгоритма решения задачи, реализация его в среде программирования Delphi. Список использованных переменных. Блок-схема программы, руководство пользователя.
курсовая работа [106,6 K], добавлен 16.06.2014Ознакомление с возможностями языка Си как средой программирования высокого уровня. Циклы программирования параметрического оператора for и функции форматированного ввода. Разработка программы средствами Си: блок-схема, текст и тестирование программы.
контрольная работа [204,4 K], добавлен 26.01.2013Алгоритм написания программы для поиска музыкальных файлов по электронному каталогу магазина на языке программирования С++. Проектирование консольного меню для обеспечения взаимодействия пользователя с компьютером. Тестирование программы на компиляторе.
курсовая работа [548,9 K], добавлен 25.11.2015Создание программы на языке программирования Visual Prolog. Разработка математической модели. Функциональные характеристики программы: оптимальный маршрут для такси. Интерфейс пользователя, руководство программиста, функциональная схема, тестовый пример.
курсовая работа [515,4 K], добавлен 18.10.2010Разработка структуры базы данных для хранения дипломных проектов в среде объектно-ориентированного программирования Python. Создание внешнего вида окон ввода-вывода информации, технологии переходов. Листинг программы с пояснениями; направления улучшения.
курсовая работа [3,1 M], добавлен 27.02.2015Описание предметной области и разработка электронного учебника на основе архитектуры "клиент – сервер". Тестирование программы менеджера и создание интерфейса главного меню. Вход в программу в качестве пользователя и обеспечение перехода к данным лекций.
курсовая работа [1,5 M], добавлен 26.02.2015Разработка приложений на платформе Win32 для исследования взаимодействия между процессами через отображение файла в память. Модель приложений "клиент - сервер". Описание алгоритма работы программы-клиента и программы-сервера. Результаты работы приложений.
курсовая работа [869,3 K], добавлен 18.05.2014