четверг, 5 января 2012 г.

Введение в Windows Sockets API: Проект программы

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

Конечная программа будет сочетать в себе как функционал клиентских приложений, так и серверных. То есть будет не только подключаться к сторонним процессам, но и сама принимать входящие подключения.

Компоненты

Программу можно условно разделить на пять компонентов: ввод (input), вывод (output), обработка ввода (handler), контроллер (system) и небольшая библиотека функция для работы с сокетами (socket_lib).

Ввод/вывод данных осуществляется через стандартные потоки ввода/вывода.
Компонент handler занимается обработкой ввода пользователя, устанавливая систему команд и накладывая ограничения на нее.
Контроллер непосредственно выполняет работу, которую задает пользователь через систему команд, используя доступные функции из компонента socket_lib, и выводит информацию пользователю о результатах этой работы.

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

Функциональность

Теперь необходимо определиться с тем, что должна делать программа. Так как она сочетает в себе одновременно функции клиента и сервера, то список функций примерно следующий:

  • Создать сервер
  • Отправить сообщение
  • Вывод информации о текущем подключении
  • Вывод истории подключений
Программа может держать одновременно только одно подключение (внешнее или исходящее). Реализация поддержки множества одновременных подключений требует использование потоков, что выходит за рамки этой серии статей и усложняет программу.

Система команд

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

  • create_server port - создает слушающий сокет и привязывает его к порту port на текущем компьютере.
  • send ip port mess - отправляет сообщение mess к процессу, запущенному по адресу ip:port. В качестве ip можно указать 127.0.0.1, что позволит отправить сообщение другому процессу запущенному на текущей (локальной) машине или самому себе, если указать порт к которому привязан слушающий сокет текущего процесса.
  • show_connection - отображает информацию о текущем подключении.
  • show_history - отображает историю подключений.

Заключение

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

Введение в WSA

Комментариев нет:

Отправить комментарий