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