МногопоточныйTCPСервер (MultithreadedTCPServer) Конструктор

Синтаксис

МногопоточныйTCPСервер(<НомерПорта>)

Параметры

НомерПорта (обязательный)
Тип: Число.
Прослушиваемый TCP-порт для входящих запросов на подключение на сервере.

Описание

Создаёт новый экземпляр класса МногопоточныйTCPСервер (MultithreadedTCPServer).

Примечание

Цикл ожидания событий сервера остановит выполнение скрипта. Если нужно продолжение выполнения скрипта после запуска сервера создавайте сервер через метод ФоновыйМногопоточныйСервер (BackgroundMultithreadedServer).

Пример

Сервер = МС.МногопоточныйСервер(8080);
Полный пример кода


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

Смотрите также

Библиотека MultithreadedTCPServer