Программа, иллюстрирующая механизмы использования сокетов

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    72,58 Кб
  • Опубликовано:
    2014-10-06
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Программа, иллюстрирующая механизмы использования сокетов

МИНОБР НАУКИ РФ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ  ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

"ЮЖНЫЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ"

ТЕХНОЛОГИЧЕСКИЙ ИНСТИТУТ

ЮЖНОГО ФЕДЕРАЛЬНОГО УНИВЕРСИТЕТА В г. ТАГАНРОГЕ

Факультет информационной безопасности




Курсовая работа

"Программа, иллюстрирующая механизмы использования сокетов"

"Вычислительные сети"











Таганрог - 2014

Оглавление


Введение

. Теоретическая справка

. Блок-схема работы программы

. Руководство программиста

. Руководство пользователя

Заключение

Список использованной литературы

Приложение

программа сокет потоковый дейтаграммный

Введение


Сокеты представляют собой чрезвычайно удобную, но в то же время плохо понятую технологию взаимодействия между двумя процессами в сети. Эти процессы могут существовать на одной и той же машине, общаясь друг с другом через локальный сокет, предназначенный для взаимодействия между процессами, либо на разных машинах через 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, используют сырые сокеты.

Сокеты также бывают "блокирующими" и "неблокирующими". Блокирующие сокеты заставляют ваше приложение ожидать до тех пор, пока данные станут доступны, в то время как неблокирующие сокеты этого не делают. Хотя все сокеты двунаправлены, все же существует разница между сокетами клиента и сервера. Серверный сокет прослушивает определенный порт, а клиентский подключается к серверу. После того, как было установлено соединение начинается обмен данными.



2. Блок-схема работы программы


Работа программы автоматического сервиса поиска может быть представлена в виде блок-схемы, реализованной как результат взаимодействия пользователя с программой.

Пользователь начинает работу с программой последовательно запустив два файла "server1.py" и "client1.py". Это действие представлено блоком "Запустить программу"

В окне клиента пользователю предлагается ввести ключевое слово поиска (фамилию).Данное действие выглядит как блок "Введите фамилию".

После этого программа осуществляет проверку введенных данных на наличие их в базе. Этот блок условия представлен как "Найден ли результат?".

Если результат не найден ("Нет"), то программа сообщает об отсутствии данных в базе и пользователь может повторить попытку.

Если результат найден ("Да"), то программа выводит его в окне клиента. Пользователь может продолжить поиск. На блок-схеме это условие выглядит как "Продолжить работу с программой?". Если пользователь продолжает поиск ("Да"), необходимо ввести следующее ключевое слово поиска(Фамилию). Если поиск нужно прекратить("Нет"), в окне сервера пользователь вводит слово "Выйти", тем самым прекращая работу сервиса.

Рис.2. Блок-схема.

3. Руководство программиста


В данной работе разработка программы выполнена на языке PYTHON в среде программирования PyCharm.2.7.3. Код программы можно условно разделить на несколько основных логических модулей.

. В Python для работы с сокетами используется библиотека socket. С подключения этой библиотеки начинается код как сервера, так и клиента.

. Создание сокета. По примеру - sock = socket.socket(). Эта часть является так же общей как для клиентского, так и для серверного приложений.

.Обозначение хоста и порта сервера. Этот этап осуществляется с помощью метода

Bind() - он связывает сокет с локальной конечной точкой для ожидания входящих запросов на соединение. В качестве параметра метод принимает хост и порт.

         4.Установка соединения реализуется с помощью нескольких методов: Listen() - помещает сокет в режим прослушивания (ожидания). Этот метод предназначен только для серверных приложений. В качестве параметра метод принимает возможное число подключений. Метод Accept() создает новый сокет для обработки входящего запроса на соединение. Connect() - Устанавливает соединение с удаленным хостом.

Благодаря методу Raw_input () клиент вводит данные с клавиатуры и результат ввода присваивается некоторой переменной.А метод Send() отправляет данные соединенному сокету.

.Прием данных от клиента и обработка запроса. Этот программный модуль реализуется при помощи метода Recv() - получает данные от соединенного сокета, в качестве аргумента принимает количество байт для чтения. Мы будем читать порциями по 1024 байт (или 1 кб). Чтобы открыть файл (базу данных) для чтения, необходимо использовать метод Open(). В качестве параметра ему передается имя открываемого файла и режим чтения.

. При помощи метода find() мы можем проверить вхождение подстроки переданной в качестве параметра в проверяемой строке.

. Метод close() закрывает соединение.

4. Руководство пользователя


Для того, чтобы начать работу с программой необходимо последовательно запустить файлы "server1.py" и "client1.py" в среде программирования PyCharm.2.7.3. Это можно сделать, нажав правой кнопкой мыши на соответствующую вкладку, и, выбрав действие"Run".



2.Далее пользователь может ввести ключевое слово поиска (Фамилию).


3.Если в базе нет данных, сервер вернет данное сообщение.



4.Чтобы прекратить работу с сервисом необходимо ввести "Выйти".



Заключение


Компьютерный мир глобализируется на основе сетевых коммуникаций и протоколов. Интернет становится обязательным атрибутом повседневности. Все больше появляется приложений, ориентированных на сеть: это серверы баз данных, сетевые игры, различные сетевые протоколы, Web-серверы, апплеты, сервлеты, CGI-скрипты и т.д. Становится необходимым глубокое изучение сетевого программирования.

В ходе создания данной программы я проиллюстрировала принцип работы сокетов с помощью программы автоматического сервера поиска, ознакомилась с языком программирования Python. Данная работа помогла мне закрепить теоретические знания в области вычислительных сетей и открыть для себя новые методы программирования.

Список использованной литературы


1.      Марк Пилгрим "Вглубь языка Python" , 2002

.        Бизли. Д "Python. Подробный справочник" , 2010

Приложение


Программа серверного приложения:

import socket

sock = socket.socket().bind(('', 9854)).listen(1), adr = sock.accept()

connect.send('Введите фамилию:')

c=1c==1= connect.recv(1024)

записывает в переменную datadata=='выйти':=2.send('Сервис закрыт.')

connect.close()= open('text.txt','r')=0=0line in f:count1==0:=1line.find(data)!=-1:.send(line[0:len(line)-1:1])=0:=1count==1:

connect.send('Пользователь отсутствует в базе.').close()

Программа клиентского приложения:

Похожие работы на - Программа, иллюстрирующая механизмы использования сокетов

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!