Можете ли вы объяснить более подробно, в чем разница между PIPE_READMODE_MESSAGE / PIPE_READMODE_BYTE? - PullRequest
8 голосов
/ 22 августа 2010

Хотя я просмотрел документ здесь , мне все равно не имеет смысла, что это такое:

Данные читаются из канала как потоксообщений.Этот режим можно использовать только в том случае, если также указан параметр PIPE_TYPE_MESSAGE.

Ответы [ 2 ]

5 голосов
/ 22 августа 2010

В режиме BYTE вы должны выяснить разделение данных, чтобы их можно было декодировать на принимающей стороне. В режиме СООБЩЕНИЯ API сделает это за вас. Когда вы прочитаете сообщение на другой стороне, у вас будет целый блок данных (сообщение).

В обоих случаях вам по-прежнему понадобятся некоторые данные заголовка, чтобы обернуть ваше сообщение / данные, чтобы узнать, что это такое, если вы смешиваете типы данных, передаваемые по каналу.

РЕДАКТИРОВАТЬ: документация указывает на очень четкий пример клиент / сервер, использующий этот API и режим MESSAGE между ними.

http://msdn.microsoft.com/en-us/library/aa365592%28v=VS.85%29.aspx

http://msdn.microsoft.com/en-us/library/aa365588%28v=VS.85%29.aspx

1 голос
/ 22 августа 2010

Разница между режимами типа PIPE_TYPE_BYTE и PIPE_TYPE_MESSAGE описана в http://msdn.microsoft.com/en-us/library/aa365605.aspx:

Режим ввода типов

Режим ввода типов каналов определяет способ записи данных.в именованную трубу.Данные могут передаваться через именованный канал в виде потока байтов или потока сообщений.Канальный сервер указывает тип канала при вызове CreateNamedPipe для создания экземпляра именованного канала.Режимы типа должны быть одинаковыми для всех экземпляров канала.

Чтобы создать канал байтового типа, укажите PIPE_TYPE_BYTE или используйте значение по умолчанию.Данные записываются в канал как поток байтов, и система не делает различий между байтами, записанными в различных операциях записи.

Чтобы создать канал типа сообщения, укажите PIPE_TYPE_MESSAGE.Система обрабатывает байты, записанные в каждой операции записи в канал, как блок сообщений.Система всегда выполняет операции записи на каналах типа сообщений, как если бы был включен режим сквозной записи.

Если вы хотите записать поток данных относительно каналов, вам следует использовать режим типа PIPE_TYPE_BYTE.Затем вы можете записать любые данные в буфер канала относительно WriteFile и прочитать их на другой стороне относительно ReadFile.Как именно данные будут отправлены, для вас не важно.Данные из некоторой операции WriteFile могут передаваться как один блок данных.

Если вы используете режим типа PIPE_TYPE_MESSAGE, каждая операция записи следует за передачей данных, поскольку запись в канале будет интерпретироваться какотправка сообщения.Существует специальная функция TransactNamedPipe, которая позволяет вам записать сообщение и прочитать сообщение из указанного именованного канала в отдельную сетевую операцию .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...