Чтение и запись.
Тип: РежимКлиента (ClientMode).
Возвращает или задает значение, показывающее, взаимодействует ли сервер с клиентами, не являющимися экземплярами классов из библиотеки OneScriptClientServer.
Значение по умолчанию - Отсутствие (None).
Сторонним клиентом, взаимодействующим с сервером, может быть какой либо браузер, или например объект TCPСоединение / TCPConnection из библиотеки односкрипта. Данные такого клиента отправляются в коммуникационный поток без предварительной обработки. Клиенты, являющиеся экземплярами классов из библиотеки OneScriptClientServer, обмениваются через коммуникационный поток данными, прошедшими предварительную обработку. А именно, они обмениваются данными сериализоваными, с добавлением дополнительной информации. Поэтому серверу необходимо явно, через данное свойство, указать с каким клиентом он будет взаимодействовать.
Клиент TCPСоединение / TCPConnection из библиотеки односкрипта может послать серверу строку или файл, переведенный в двоичные данные. Сервер сам может определить следующие типы файлов по
сигнатуре:
- avi - Audio Video Interleave video format
- bin - Amazon Kindle Update Package
- bmp - BMP file, a bitmap format used mostly in the Windows world
- deb - linux deb file
- exe - DOS MZ executable file format and its descendants(including NE and PE)
- ico - Computer icon encoded in ICO file format
- jpg - JPEG raw or in the JFIF or Exif file format
- mp3 - MP3 file
- pdf - PDF document
- png - Image encoded in the Portable Network Graphics format
- rar - RAR archive
- rpm - RedHat Package Manager (RPM)package
- rtf - Rich Text Format
- wav - Waveform Audio File Format
- XML - eXtensible Markup Language when using the ASCII character encoding
- zip - zip file format and formats based on it, such as JAR, ODF, OOXML
- текстовый файл - UTF-8 encoded Unicode byte order mark, commonly seen in text files
Это значит, что если в начале передаваемых байтов сервером будет найдена так называемая магическая последовательность байтов относящаяся к вышеперечисленным типам файлов,
сервер будет обращаться с ними как с двоичными данными. Остальные данные он будет считать текстом в кодировке UTF-8.
Отправку сообщений с сервера помещайте в оператор Попытка Исключение. Это предотвратит блокировку сервера при сбоях в отправке.
Обязательно назначте обработчик для события TCPСервер.ПриПодключенииКлиента (TcpServer.ClientConnected). Он даже может не содержать кода, но должен быть назначен.
КС.РежимСтороннегоКлиента = КС.РежимКлиента.Нативный;
Копировать Выделить всё//== Файл Сервер.os == начало Перем КС; Процедура Сервер_ПриПодключенииКлиента() Экспорт СерверКлиент = КС.СерверКлиентАрг().Клиент; Сообщить("Клиент подключен. Идентификатор клиента = " + СерверКлиент.ИдентификаторКлиента + " " + ТекущаяДата()); Попытка СерверКлиент.ОтправитьСообщение(КС.СообщениеБайты(Новый ДвоичныеДанные("C:\444\Pic\20231230221311-f.7z"))); Исключение Сообщить("Неудачная отправка"); КонецПопытки; КонецПроцедуры Процедура Сервер_ПриОтключенииКлиента() Экспорт СерверКлиент = КС.СерверКлиентАрг().Клиент; Сообщить("Клиент отключен. Идентификатор клиента = " + СерверКлиент.ИдентификаторКлиента + " " + ТекущаяДата()); КонецПроцедуры ПодключитьВнешнююКомпоненту("C:\444\111\OneScriptClientServer\OneScriptClientServer\bin\Debug\OneScriptClientServer.dll"); КС = Новый КлиентСерверДляОдноСкрипта(); TCPСервер1 = КС.TCPСервер(3333); TCPСервер1.ПриПодключенииКлиента = КС.Действие(ЭтотОбъект, "Сервер_ПриПодключенииКлиента"); TCPСервер1.ПриОтключенииКлиента = КС.Действие(ЭтотОбъект, "Сервер_ПриОтключенииКлиента"); КС.РежимСтороннегоКлиента = КС.РежимКлиента.Нативный; // Запустим сервер TCPСервер1.Начать(); Сообщить("Сервер запущен"); // Запустим цикл обработки событий Пока КС.Продолжать Цикл КС.ПолучитьСобытие().Выполнить(); КонецЦикла; //== Файл Сервер.os == конец //== Файл Клиент.os == начало // Архив размером 1,5 Гб был передан с сервера клиенту на 127.0.0.1 за 23 сек. Похоже ограничения в размере только системные. TCPСоединение = Новый TCPСоединение("127.0.0.1", 3333); Приостановить(1000); // Определим время на установку соединения с сервером. TCPСоединение.ТаймаутЧтения = 2000; // Чтобы соединение не оставалось открытым бесконечно долго в случае неполадок в сети. При ненадежном соединении увеличивайте значение. ДвоичныеДанныеОтвета = Новый Массив; // Ответы сервера размеров до 8 килобайт можно принимать и в одной строке // ДД = TCPСоединение.ПрочитатьДвоичныеДанные(); // Но данные большего размера необходимо получать в таком цикле Пока Истина Цикл Попытка ДвоичныеДанныеОтвета.Добавить(TCPСоединение.ПрочитатьДвоичныеДанные()); Исключение Прервать; КонецПопытки; КонецЦикла; ДД = СоединитьДвоичныеДанные(ДвоичныеДанныеОтвета); Сообщить("" + ДД); ДД.Записать("C:\444\Pic\20231230221311-f2.7z"); //== Файл Клиент.os == конец
Копировать Выделить всё//== Файл Сервер.os == начало Перем КС; Процедура Сервер_ПриПодключенииКлиента() Экспорт СерверКлиент = КС.СерверКлиентАрг().Клиент; Сообщить("Клиент подключен. Идентификатор клиента = " + СерверКлиент.ИдентификаторКлиента + " " + ТекущаяДата()); КонецПроцедуры Процедура Сервер_ПриОтключенииКлиента() Экспорт СерверКлиент = КС.СерверКлиентАрг().Клиент; Сообщить("Клиент отключен. Идентификатор клиента = " + СерверКлиент.ИдентификаторКлиента + " " + ТекущаяДата()); КонецПроцедуры Процедура Сервер_ПриПолученииСообщения() Экспорт Сообщение = КС.АргументыСобытия.Сообщение; Отправитель = КС.АргументыСобытия.Отправитель; Сообщить("Сообщение.Текст = " + Сообщение.Текст); Попытка Отправитель.ОтправитьСообщение(КС.СообщениеТекст(Сообщение.Текст)); Исключение Сообщить("Неудачная отправка"); КонецПопытки; КонецПроцедуры ПодключитьВнешнююКомпоненту("C:\444\111\OneScriptClientServer\OneScriptClientServer\bin\Debug\OneScriptClientServer.dll"); КС = Новый КлиентСерверДляОдноСкрипта(); TCPСервер1 = КС.TCPСервер(3333); TCPСервер1.ПриПодключенииКлиента = КС.Действие(ЭтотОбъект, "Сервер_ПриПодключенииКлиента"); TCPСервер1.ПриОтключенииКлиента = КС.Действие(ЭтотОбъект, "Сервер_ПриОтключенииКлиента"); TCPСервер1.ПриПолученииСообщения = КС.Действие(ЭтотОбъект, "Сервер_ПриПолученииСообщения"); КС.РежимСтороннегоКлиента = КС.РежимКлиента.Нативный; // Запустим сервер TCPСервер1.Начать(); Сообщить("Сервер запущен"); // Запустим цикл обработки событий Пока КС.Продолжать Цикл КС.ПолучитьСобытие().Выполнить(); КонецЦикла; //== Файл Сервер.os == конец //== Файл Клиент.os == начало TCPСоединение = Новый TCPСоединение("127.0.0.1", 3333); Приостановить(1000); // Определим время на установку соединения с сервером. TCPСоединение.ТаймаутЧтения = 2000; // Чтобы соединение не оставалось открытым бесконечно долго в случае неполадок в сети. При ненадежном соединении увеличивайте значение. // Так отправим 10 Мб текста. Стр1 = ""; Стр1000Знаков = "ДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнакДесятьЗнак"; Для А = 0 По 10 Цикл Стр1 = Стр1 + Стр1000Знаков + Символы.ПС + СтрДлина(Стр1); КонецЦикла; TCPСоединение.ОтправитьСтроку(Стр1); Приостановить(5000); // Определим время на отправку двоичных данных. Неудобство при работе с объектом TCPСоединение заключается в ручном подборе времени приостановки. Ответ = ""; // Ответы сервера размеров до 8 килобайт можно принимать и в одной строке // ДД = TCPСоединение.ПрочитатьДвоичныеДанные(); // Но данные большего размера необходимо получать в таком цикле Пока Истина Цикл Попытка Ответ = Ответ + TCPСоединение.ПрочитатьСтроку(); Исключение Прервать; КонецПопытки; КонецЦикла; Сообщить("Ответ = " + Ответ); //== Файл Клиент.os == конец
Копировать Выделить всё//== Файл Сервер.os == начало Перем КС; Процедура Сервер_ПриПодключенииКлиента() Экспорт СерверКлиент = КС.СерверКлиентАрг().Клиент; Сообщить("Клиент подключен. Идентификатор клиента = " + СерверКлиент.ИдентификаторКлиента + " " + ТекущаяДата()); КонецПроцедуры Процедура Сервер_ПриОтключенииКлиента() Экспорт СерверКлиент = КС.СерверКлиентАрг().Клиент; Сообщить("Клиент отключен. Идентификатор клиента = " + СерверКлиент.ИдентификаторКлиента + " " + ТекущаяДата()); КонецПроцедуры Процедура Сервер_ПриПолученииСообщения() Экспорт Сообщение = КС.АргументыСобытия.Сообщение; Отправитель = КС.АргументыСобытия.Отправитель; Сообщить("Сообщение.Данные = " + Сообщение.Текст); ДД = Base64Значение(Сообщение.Текст); ДД.Записать("C:\444\НативныйКлиент\1,3мб-2.7z"); Попытка Отправитель.ОтправитьСообщение(КС.СообщениеБайты(Новый ДвоичныеДанные("C:\444\НативныйКлиент\1,5гб.7z"))); Исключение Сообщить("Неудачная отправка"); КонецПопытки; КонецПроцедуры ПодключитьВнешнююКомпоненту("C:\444\111\OneScriptClientServer\OneScriptClientServer\bin\Debug\OneScriptClientServer.dll"); КС = Новый КлиентСерверДляОдноСкрипта(); TCPСервер1 = КС.TCPСервер(3333); TCPСервер1.ПриПодключенииКлиента = КС.Действие(ЭтотОбъект, "Сервер_ПриПодключенииКлиента"); TCPСервер1.ПриОтключенииКлиента = КС.Действие(ЭтотОбъект, "Сервер_ПриОтключенииКлиента"); TCPСервер1.ПриПолученииСообщения = КС.Действие(ЭтотОбъект, "Сервер_ПриПолученииСообщения"); КС.РежимСтороннегоКлиента = КС.РежимКлиента.Нативный; // Запустим сервер TCPСервер1.Начать(); Сообщить("Сервер запущен"); // Запустим цикл обработки событий Пока КС.Продолжать Цикл КС.ПолучитьСобытие().Выполнить(); КонецЦикла; //== Файл Сервер.os == конец //== Файл Клиент.os == начало TCPСоединение = Новый TCPСоединение("127.0.0.1", 3333); Приостановить(1000); // Определим время на установку соединения с сервером. TCPСоединение.ТаймаутЧтения = 2000; // Чтобы соединение не оставалось открытым бесконечно долго в случае неполадок в сети. При ненадежном соединении увеличивайте значение. TCPСоединение.ОтправитьСтроку(Base64Строка(Новый ДвоичныеДанные("C:\444\НативныйКлиент\1,3мб.7z"))); Приостановить(20000); // Определим время на отправку двоичных данных. Неудобство при работе с объектом TCPСоединение заключается в ручном подборе времени приостановки. ДвоичныеДанныеОтвета = Новый Массив; // Ответы сервера размеров до 8 килобайт можно принимать и в одной строке // ДД = TCPСоединение.ПрочитатьДвоичныеДанные(); // Но данные большего размера необходимо получать в таком цикле Пока Истина Цикл Попытка ДвоичныеДанныеОтвета.Добавить(TCPСоединение.ПрочитатьДвоичныеДанные()); Исключение Прервать; КонецПопытки; КонецЦикла; ДД = СоединитьДвоичныеДанные(ДвоичныеДанныеОтвета); Сообщить("ДД = " + ДД); ДД.Записать("C:\444\НативныйКлиент\1,5гб-2.7z"); // Размер архива 1,5 Гб. //== Файл Клиент.os == конец
Копировать Выделить всё//== Файл Сервер.os == начало Перем КС; Перем ПодключенныйСценарий; Процедура Сервер_ПриПодключенииКлиента() Экспорт СерверКлиент = КС.СерверКлиентАрг().Клиент; Сообщить("Клиент подключен. Идентификатор клиента = " + СерверКлиент.ИдентификаторКлиента + " " + ТекущаяДата()); КонецПроцедуры Процедура Сервер_ПриОтключенииКлиента() Экспорт СерверКлиент = КС.СерверКлиентАрг().Клиент; Сообщить("Клиент отключен. Идентификатор клиента = " + СерверКлиент.ИдентификаторКлиента + " " + ТекущаяДата()); КонецПроцедуры Процедура Сервер_ПриПолученииСообщения() Экспорт Сообщение = КС.АргументыСобытия.Сообщение; Отправитель = КС.АргументыСобытия.Отправитель; Структура1 = Новый Структура("КС",КС); Структура1.Вставить("Сообщение", Сообщение); Структура1.Вставить("Отправитель", Отправитель); Рефлектор = Новый Рефлектор; Объект = ПодключенныйСценарий; ИмяМетода = "Сервер_ПриПолученииСообщения"; ПараметрыВыполнения = Новый Массив; ПараметрыВыполнения.Добавить(Структура1); Рефлектор.ВызватьМетод(Объект, ИмяМетода, ПараметрыВыполнения); КонецПроцедуры ТекПуть = Новый Файл(ТекущийСценарий().Источник).Путь; ПодключитьСценарий(ОбъединитьПути(ТекПуть,"ПодключенныйСценарий.os"), "ПодключенныйСценарий"); ПодключенныйСценарий = Новый ПодключенныйСценарий(); ПодключитьВнешнююКомпоненту("C:\444\111\OneScriptClientServer\OneScriptClientServer\bin\Debug\OneScriptClientServer.dll"); КС = Новый КлиентСерверДляОдноСкрипта(); TCPСервер1 = КС.TCPСервер(3333); TCPСервер1.ПриПодключенииКлиента = КС.Действие(ЭтотОбъект, "Сервер_ПриПодключенииКлиента"); TCPСервер1.ПриПолученииСообщения = КС.Действие(ЭтотОбъект, "Сервер_ПриПолученииСообщения"); TCPСервер1.ПриОтключенииКлиента = КС.Действие(ЭтотОбъект, "Сервер_ПриОтключенииКлиента"); КС.РежимСтороннегоКлиента = КС.РежимКлиента.Браузер; // Запустим сервер TCPСервер1.Начать(); Сообщить("Сервер запущен"); // Запустим цикл обработки событий Пока КС.Продолжать Цикл КС.ПолучитьСобытие().Выполнить(); КонецЦикла; //== Файл Сервер.os == конец //== Файл ПодключенныйСценарий.os == начало // Отправка запроса с ресурса, который использовался в качестве браузер-клиента. // Его адрес https://reqbin.com/#pills-req-content // Запрос отправлялся на сервер 127.0.0.1:3333/ // Интересный материал для ознакомлениями с основными положениями общения сервера и браузер-клиента по протоколу http я нашел в статье https://habr.com/ru/companies/avito/articles/710660/ Функция ТекстСообщения(Параметр1) СимволПС = Символы.ВК + Символы.ПС; // Ответ для браузер-клиента нужно сформировать по определенным правилам, с заголовком и прочими составляющими. Массив = Новый Массив(); Массив.Добавить("HTTP/1.1 200 OK"); Массив.Добавить("Server: Test"); Массив.Добавить("Content-Type: text/html; charset=utf-8"); Массив.Добавить(СимволПС); ДвоичныеДанныеЗаголовков = ПолучитьДвоичныеДанныеИзСтроки(СтрСоединить(Массив, СимволПС), "utf-8"); // Для наглядности, что всё работает. Параметр1 - это тело переданного запроса. ДвоичныеДанныеТела = ПолучитьДвоичныеДанныеИзСтроки(" Всё работает!!!! " + ТекущаяУниверсальнаяДатаВМиллисекундах() + Символы.ПС + Параметр1); ДвоичныеДанныеОтвета = Новый Массив; ДвоичныеДанныеОтвета.Добавить(ДвоичныеДанныеЗаголовков); ДвоичныеДанныеОтвета.Добавить(ДвоичныеДанныеТела); Ответ = СоединитьДвоичныеДанные(ДвоичныеДанныеОтвета); Возврат ПолучитьСтрокуИзДвоичныхДанных(Ответ); КонецФункции Процедура Сервер_ПриПолученииСообщения(Параметр = Неопределено) Экспорт КС2 = Параметр["КС"]; Сообщение = Параметр["Сообщение"]; Отправитель = Параметр["Отправитель"]; Сообщить("" + Сообщение.Текст); Отправитель.ОтправитьСообщение(КС2.СообщениеТекст(ТекстСообщения(Сообщение.Текст))); Если КС2.РежимСтороннегоКлиента = КС2.РежимКлиента.Браузер Тогда Отправитель.Отключить(); // Нужно в случае клиента-браузера по протоколу http. КонецЕсли; КонецПроцедуры //== Файл ПодключенныйСценарий.os == конец
Копировать Выделить всё//== Файл Сервер.os == начало Перем КС; Перем ПодключенныйСценарий; Процедура Сервер_ПриПодключенииКлиента() Экспорт СерверКлиент = КС.СерверКлиентАрг().Клиент; Сообщить("Клиент подключен. Идентификатор клиента = " + СерверКлиент.ИдентификаторКлиента + " " + ТекущаяДата()); КонецПроцедуры Процедура Сервер_ПриОтключенииКлиента() Экспорт СерверКлиент = КС.СерверКлиентАрг().Клиент; Сообщить("Клиент отключен. Идентификатор клиента = " + СерверКлиент.ИдентификаторКлиента + " " + ТекущаяДата()); КонецПроцедуры Процедура Сервер_ПриПолученииСообщения() Экспорт Сообщение = КС.АргументыСобытия.Сообщение; Отправитель = КС.АргументыСобытия.Отправитель; Структура1 = Новый Структура("КС",КС); Структура1.Вставить("Сообщение", Сообщение); Структура1.Вставить("Отправитель", Отправитель); Рефлектор = Новый Рефлектор; Объект = ПодключенныйСценарий; ИмяМетода = "Сервер_ПриПолученииСообщения"; ПараметрыВыполнения = Новый Массив; ПараметрыВыполнения.Добавить(Структура1); Рефлектор.ВызватьМетод(Объект, ИмяМетода, ПараметрыВыполнения); КонецПроцедуры ТекПуть = Новый Файл(ТекущийСценарий().Источник).Путь; ПодключитьСценарий(ОбъединитьПути(ТекПуть,"ПодключенныйСценарий.os"), "ПодключенныйСценарий"); ПодключенныйСценарий = Новый ПодключенныйСценарий(); ПодключитьВнешнююКомпоненту("C:\444\111\OneScriptClientServer\OneScriptClientServer\bin\Debug\OneScriptClientServer.dll"); КС = Новый КлиентСерверДляОдноСкрипта(); TCPСервер1 = КС.TCPСервер(3333); TCPСервер1.ПриПодключенииКлиента = КС.Действие(ЭтотОбъект, "Сервер_ПриПодключенииКлиента"); TCPСервер1.ПриПолученииСообщения = КС.Действие(ЭтотОбъект, "Сервер_ПриПолученииСообщения"); TCPСервер1.ПриОтключенииКлиента = КС.Действие(ЭтотОбъект, "Сервер_ПриОтключенииКлиента"); КС.РежимСтороннегоКлиента = КС.РежимКлиента.Браузер; // Запустим сервер TCPСервер1.Начать(); Сообщить("Сервер запущен"); // Запустим цикл обработки событий Пока КС.Продолжать Цикл КС.ПолучитьСобытие().Выполнить(); КонецЦикла; //== Файл Сервер.os == конец //== Файл ПодключенныйСценарий.os == начало // Для тестирования в теле запроса POST использовался небольшой png файл переведённый в формат строки Base64. // Отправка запроса с ресурса, который использовался в качестве браузер-клиента. // Его адрес https://reqbin.com/#pills-req-content // Запрос отправлялся на сервер 127.0.0.1:3333/ // СтрBase64ДляОтправки = "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAa0lEQVR42s2TSwrAMAhE423NieJtrYYKVkIbbRedVYLjQ/xAEyEit4SICOwNmjwSyT1A0oAIuQD6RnL0bgEkDhJjDzB/uYIlIKvvAeDmeyc+92YJ4Iel8p6fAl71oDwF/VTvYZacPWeTHtMBv9hdpYkwBIQAAAAASUVORK5CYII="; // Интересный материал для ознакомлениями с основными положениями общения сервера и браузер-клиента по протоколу http я нашел в статье https://habr.com/ru/companies/avito/articles/710660/ Функция ТекстСообщения(Параметр1) СимволПС = Символы.ВК + Символы.ПС; // Ответ для браузер-клиента нужно сформировать по определенным правилам, с заголовком и прочими составляющими. Массив = Новый Массив(); Массив.Добавить("HTTP/1.1 200 OK"); Массив.Добавить("Server: Test"); Массив.Добавить("Content-Type: text/html; charset=utf-8"); Массив.Добавить(СимволПС); ДвоичныеДанныеЗаголовков = ПолучитьДвоичныеДанныеИзСтроки(СтрСоединить(Массив, СимволПС), "utf-8"); // Для наглядности, что всё работает. Параметр1 - это тело переданного запроса. ДвоичныеДанныеТела = ПолучитьДвоичныеДанныеИзСтроки(" Всё работает!!!! " + ТекущаяУниверсальнаяДатаВМиллисекундах() + Символы.ПС + "Принят ответ от сервера длиной " + СтрДлина(Параметр1) + " символа."); ДвоичныеДанныеОтвета = Новый Массив; ДвоичныеДанныеОтвета.Добавить(ДвоичныеДанныеЗаголовков); ДвоичныеДанныеОтвета.Добавить(ДвоичныеДанныеТела); Ответ = СоединитьДвоичныеДанные(ДвоичныеДанныеОтвета); Возврат ПолучитьСтрокуИзДвоичныхДанных(Ответ); КонецФункции Процедура Сервер_ПриПолученииСообщения(Параметр = Неопределено) Экспорт КС2 = Параметр["КС"]; Сообщение = Параметр["Сообщение"]; Отправитель = Параметр["Отправитель"]; СтрСообщения = Сообщение.Текст; Сообщить("Сообщение.Текст = " + СтрСообщения); СтрДД = ""; Индекс = СтрНайти(СтрСообщения, Символы.ВК + Символы.ПС + Символы.ВК + Символы.ПС); Если Индекс > 0 Тогда СтрДД = Сред(СтрСообщения, Индекс + 2, СтрДлина(СтрСообщения) - Индекс + 2); // Получили тело запроса от браузер-клиента. ДД = Base64Значение(СтрДД); ДД.Записать("C:\444\Pic\File001.png"); КонецЕсли; // Заменим тело принятого запроса на большой файл и отправим ответом. ДД = Новый ДвоичныеДанные("C:\444\Pic\Фото213Мб.jpg"); СтрBase64 = Base64Строка(ДД); СтрСообщения = СтрЗаменить(СтрСообщения, СтрДД, СтрBase64); Отправитель.ОтправитьСообщение(КС2.СообщениеТекст(ТекстСообщения(СтрСообщения))); Если КС2.РежимСтороннегоКлиента = КС2.РежимКлиента.Браузер Тогда Отправитель.Отключить(); // Нужно в случае клиента-браузера по протоколу http. КонецЕсли; КонецПроцедуры //== Файл ПодключенныйСценарий.os == конец
КлиентСерверДляОдноСкрипта (OneScriptClientServer) Класс | Библиотека OneScriptClientServer