TCP
Этот раздел посвящен библиотеке для работы с TCP соединениями в 1С:Предприятие, OneScript и CLI. На данной странице описаны все действия, необходимые для полноценного начала работы
Пожалуйста, ознакомьтесь с разделом "О внешних компонентах" перед началом работы
Узнать больше: "Об использовании OpenSSL во внешних компонентах"
Начало работы
Библиотека предоставляет возможность работы с TCP протоколом в двух режимах: как клиент (подключение к удаленному серверу) и как сервер (прием входящих соединений). Библиотека поддерживает работу с двоичными данными и текстом, использование TLS шифрования и прокси-серверов.
Работа в режиме клиента
Данная библиотека предоставляет несколько готовых методов для работы в качестве TCP клиента. Стандартная схема взаимодействия выглядит следующим образом:
- Создание объекта и подключение к серверу производит ся при помощи функции
ОткрытьСоединение. Туда передается строка подключения в формате<адрес>:<порт> - При необходимости, серверу можно отправить сообщение при помощи функций
ОтправитьДвоичныеДанныеиОтправитСтроку - Для получения данных от сервера, используются функции
ПрочитатьДвоичныеДанныеиПрочитатьСтроку. Они имеют различные параметры для ограничения получаемых данных по размеру, маркеру и ожиданию ввода (таймауту) - При окончании работы желательно явно завершать соединение при помощи функции
ЗакрытьСоединение
Для простого сценария со стандартными настройками, также существует функция ОбработатьЗапрос - она отправляет данные на указанный адрес и ждет ответа, завершая чтение при нахождении стандартного маркера \\n. Также это единственная функция, которая доступна в CLI версии ОПИ
TLS
Библиотека поддерживает работу в режиме TLS. Для его включения необходимо сформировать настройки TLS при помощи функции ПолучитьНастройкиTls, и передать их как соответствующий параметр в функцию ОткрытьСоединение или ОбработатьЗапрос. Если параметр TLS при вызове этих функций не передан, соединение инициализируется в незащищенном режиме
Использование прокси
Данный клиент поддерживает создание соединения через прокси сервер. Получить структуру настроек прокси можно при помощи функции ПолучитьНастройкиПрокси. Полученная структура, далее, должна быть передана в функцию ОткрытьСоединение или ОбработатьЗапрос при начале работы
...
ТипПрокси = "http"; // http, socks5, socks4
АдресПрокси = "127.0.0.1";
ПортПрокси = "8071";
ЛогинПрокси = "proxyuser";
ПарольПрокси = "12we...";
НастройкиПрокси = OPI_TCP.ПолучитьНастройкиПрокси(АдресПрокси, ПортПрокси, ТипПрокси, ЛогинПрокси, ПарольПрокси);
Соединение = OPI_TCP.ОткрытьСоединение(Адрес, НастройкиTLS, НастройкиПрокси);
Поддерживается работа через SOCKS4, SOCKS5 и HTTP-прокси серверы
Работа через http-прокси является экспериментальной и может быть нестабильной в зависимости от реализации прокси-сервера, его настроек и возможностей. Рекомендуется по возможности использовать SOCKS-прокси для стабильной передачи трафика
Работа в режиме сервера
Для начало использования функций TCP сервера необходимо:
- При необходимости получить структуру настроек логирования при помощи функции
ПолучитьНастройкиЛогирования - Запустить сервер при помощи функции
ЗапуститьСервер - Получать входящие данные при помощи функций
ПолучитьДанныеОчередногоСоединенияилиПолучитьДанныеСоединения - Отправлять ответы при помощи функции
ОтправитьДанные - Остановить сервер при помощи функции
ОстановитьСервер
Пример реализации простого эхо-сервера:
Процедура ЗапуститьЭхоСервер() Экспорт
Порт = 9876;
РазмерПула = 10;
НастройкиЛога = OPI_TCP.ПолучитьНастройкиЛогирования(Истина, 500, "D:\SERVER_LOG.txt");
ОбъектСервера = OPI_TCP.ЗапуститьСервер(Порт, РазмерПула, НастройкиЛога);
Если Не OPI_TCP.ЭтоОбъектСервера(ОбъектСервера) Тогда
ВызватьИсключение ОбъектСервера["error"];
КонецЕсли;
Попытка
ШаблонОтвета = "Receive ""%1"". Your IP: %2";
Пока Константы.ПоддерживатьСервер.Получить() Цикл
Результат = OPI_TCP.ПолучитьДанныеОчередногоСоединения(ОбъектСервера, 10000, 8192);
Если Не Результат["result"] Тогда
ТекстОшибки = Результат["error"];
Если ТекстОшибки = "timeout" Тогда
Продолжить;
Иначе
ВызватьИсключение ТекстОшибки;
КонецЕсли;
КонецЕсли;
IDСоединения = Результат["connectionId"];
Адрес = Результат["address"];
Сообщение = ПолучитьСтрокуИзДвоичныхДанных(Результат["message"]);
Ответ = СтрШаблон(ШаблонОтвета, Сообщение, Адрес);
OPI_TCP.ОтправитьДанные(ОбъектСервера, IDСоединения, Ответ);
КонецЦикла;
Исключение
OPI_TCP.ОстановитьСервер(ОбъектСервера);
ВызватьИсключение ОписаниеОшибки();
КонецПопытки;
OPI_TCP.ОстановитьСервер(ОбъектСервера);
КонецПроцедуры