Сетевое программирование

Возможность передавать данные между вычислительными устройствами позволяет создавать распределенные приложения, в которых одна задача решается одновременно на нескольких устройствах. В информационных системах наиболее естественным является разделение на серверную и клиентскую часть. Как правило, сервер отвечает за обработку данных, а клиент&mbsp;— за взаимодействие с пользователем. В более сложных случаях сервер может состоять из нескольких программ, которые взаимодействуют между собой (одна часть сервера может быть клиентом для другой его части). Сложность архитектуры системы (количество процессов, методы их взаимодействия и т.п.) не имеет прямого отношения к технике сетевого программирования. Здесь мы (достаточно поверхностно) рассмотрим следующие вопросы:

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

При разработке сетевого приложения важно уметь:

Протоколы бывают закрытые ("проприетарные") и открытые. Разница в том, что открытый протокол документирован, что дает возможность взаимодействовать приложениям, написанных на разных языках и разными разработчиками.

Протокол должен определять:

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

Протокол определяет формат передачи данных: типы и битовое представление. Это дает возможность организовать взаимодействие между программами на разных языках программирования. При отправке данных происходит кодирование структур данных языка A в соответствии с требованиями протокола, на другой стороне происходит декодирование сообщения в структуры данных языка B. Такие преобразования могут быть тождественными, если в языке поддерживается нужный тип данных.

Техническая часть

на С++

на Python