Чтение и запись.
Тип: Кодировка (Encoding).
Возвращает или задает кодировку текста. Значение по умолчанию - Кодировка.UTF8 (Encoding.UTF8).
Когда Вы отправляете сообщение с помощью метода TCPКлиентSSL.Отправить (TCPClientSSL.Send), у параметра этого метода может быть тип Строка или БуферДвоичныхДанных (BinaryDataBuffer). Свойство TCPКлиентSSL.Кодировка (TCPClientSSL.Encoding) будет влиять на передачу данных с типом Строка. Если Вы передаете в параметре тип БуферДвоичныхДанных (BinaryDataBuffer), используйте для изменения кодировки второй параметр метода ПолучитьБуферДвоичныхДанныхИзСтроки (GetBinaryDataBufferFromString).
Клиент.Отправить(ПолучитьБуферДвоичныхДанныхИзСтроки(Результат, КодировкаТекста.ANSI));
Клиент.Кодировка = МС.Кодировка().ASCII;
Перем МС; Процедура ВывестиСообщение(Данные) Попытка // В случае передачи в потоке перед самим сообщением размера сообщения используем этот вариант. РазмерДанных = Данные.ПрочитатьЦелое32(0); ДанныеСообщения = Данные.Прочитать(4, РазмерДанных); ДД = ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(ДанныеСообщения); ОтдельноеСообщение = ПолучитьСтрокуИзДвоичныхДанных(ДД, КодировкаТекста.UTF8); Сообщить("1 Получено сообщение: " + " (" + РазмерДанных + " байт):" + Символы.ПС + ОтдельноеСообщение); Если (Данные.Размер - 4 - РазмерДанных) > 0 Тогда ОстатокДанных = Данные.Прочитать(4 + РазмерДанных, Данные.Размер - 4 - РазмерДанных); // Продолжаем делить данные на отдельные сообщения. ВывестиСообщение(ОстатокДанных); КонецЕсли; Исключение // В случае передачи в потоке никак не разделенных байтов используем этот вариант. ДанныеСообщения = Данные.Прочитать(0, Данные.Размер); ОтдельноеСообщение = ПолучитьСтрокуИзБуфераДвоичныхДанных(ДанныеСообщения, КодировкаТекста.UTF8); Сообщить("2 Получено сообщение: " + " (" + Данные.Размер + " байт):" + Символы.ПС + ОтдельноеСообщение); КонецПопытки; // Можно предусмотреть другие способы разделения потока байтов на отдельные сообщения, например посылка символа перевода строки. КонецПроцедуры Процедура КлиентПолучилДанные() Экспорт Сообщить("КлиентПолучилДанные"); АргументыСобытия = МС.АргументыСобытия; Данные = АргументыСобытия.Данные; // Данные, полученные клиентом, доступны нам как тип БуферДвоичныхДанных (BinaryDataBuffer). // Если с клиентом будет взаимодействовать сервер, который формирует сообщения по оговоренным заранее правилам, // появляется возможность делить данные на отдельные сообщения и кроме того знать тип данных отдельного сообщения. // Как частный случай можно на стороне сервера отправлять в сетевой поток сначала размер сообщения (четыре байта) // а затем само сообщение. ВывестиСообщение(Данные); Сообщить("========================"); КонецПроцедуры Процедура ЗапускКлиента(параметр1) Экспорт Контекст = Новый Структура(); Контекст.Вставить("Клиент", параметр1); Стр = " |Перем ПотокСети1; | |Процедура ПроверитьСообщение() | Клиент.ОбработатьКлиентПолучилДанные(ПотокСети1.ПрочитатьВБуферДвоичныхДанных()); |КонецПроцедуры | |ПотокСети1 = Клиент.ПолучитьПотокSSL(); | |Пока Клиент.Подключен Цикл | Приостановить(100); | ПроверитьСообщение(); |КонецЦикла; |"; ЗагрузитьСценарийИзСтроки(Стр, Контекст); КонецПроцедуры ПодключитьВнешнююКомпоненту("C:\444\111\MultithreadedTCPServer\MultithreadedTCPServer\bin\Debug\MultithreadedTCPServer.dll"); МС = Новый МногопоточныйTCPСерверДляОдноСкрипта(); Клиент = МС.TCPКлиентSSL(); Клиент.Подключить("127.0.0.1", 8080); Клиент.КлиентПолучилДанные = МС.Действие(ЭтотОбъект, "КлиентПолучилДанные"); Приостановить(1000); Клиент.Кодировка = МС.Кодировка().ASCII; // Запустим клиента фоновым заданием. МассивПараметров = Новый Массив(1); МассивПараметров[0] = Клиент; Задание = ФоновыеЗадания.Выполнить(ЭтотОбъект, "ЗапускКлиента", МассивПараметров); Приостановить(1000); Сообщить("Подключен"); Сообщить("Печатайте и нажмите ENTER"); // Можно отправлять данные. Клиент.Отправить("Строка, кодировка которой определяется свойством TCPПодключение1.Кодировка"); // Фоновый TCP клиент не блокирует выполнение сценария. // Не будем закрывать подключение и остановимся в цикле ввода сообщений. Результат = Неопределено; Пока ВвестиСтроку(Результат, , , ) Цикл Клиент.Отправить(ПолучитьБуферДвоичныхДанныхИзСтроки(Результат)); КонецЦикла;