ПотокСети.ВозможностьЗаписи (NetworkStream.CanWrite) Свойство

Использование

Только чтение.

Значение

Тип: Булево.

Возвращает значение, указывающее, поддерживает ли объект запись. Значение Истина, если данные могут быть записаны в поток, в противном случае - Ложь. Значение по умолчанию: Истина.

Примечание

Пример

ПотокСети1 = Клиент.ПолучитьПоток();
Сообщить("ПотокСети1.ВозможностьЗаписи = " + ПотокСети1.ВозможностьЗаписи);
Полный пример кода


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

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

Библиотека MultithreadedTCPServer