2010-08-22 5 views
5

Obwohl ich gehen habe durch das Dokument here, es immer noch keinen Sinn für mich machen, was es ist:Können Sie genauer erklären, was der Unterschied zwischen PIPE_READMODE_MESSAGE/PIPE_READMODE_BYTE ist?

Daten werden aus dem Rohr als Stream von Nachrichten lesen. Dieser Modus kann nur verwendet werden, wenn PIPE_TYPE_MESSAGE auch angegeben ist.

+0

Related post: http://stackoverflow.com/questions/4514784/pipetransmissionmode-message-how-do-net-named-pipes-unterscheiden-zwischen-messag –

Antwort

3

Im BYTE-Modus müssen Sie die Trennung der Daten herausfinden, damit sie auf der Empfängerseite decodiert werden können. Im Modus NACHRICHT wird die API dies für Sie tun. Wenn Sie die Nachricht auf der anderen Seite lesen, haben Sie den ganzen Datenblock (die Nachricht).

In beiden Fällen benötigen Sie noch einige Kopfdaten, um Ihre Nachricht/Daten zu verpacken, um zu wissen, was es ist, wenn Sie Datentypen mischen, die über die Pipe gesendet werden.

EDIT: Die Dokumentation verweist auf ein sehr klares Beispiel von Client/Server mit dieser API und den Modus MESSAGE zwischen beiden.

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

+0

Können Sie anhand eines Beispiels veranschaulichen? – user198729

+0

Bearbeitet, um Beispiel hinzuzufügen – David

0

Der Unterschied zwischen PIPE_TYPE_BYTE und PIPE_TYPE_MESSAGE Typ Modus wird auf die http://msdn.microsoft.com/en-us/library/aa365605.aspx erläutert:

Typ Modus

Die Art Modus eines Rohres bestimmt, wie Daten wird in eine Named Pipe geschrieben. Daten können über einen Namen Pipe als entweder ein Strom von Bytes oder als ein Strom von Nachrichten übertragen werden. Der Pipe-Server gibt den Leitungstyp beim Aufruf CreateNamedPipe an, um eine Instanz einer Named Pipe zu erstellen. Die Typenmodi müssen für alle Instanzen einer Leitung gleich sein.

Um eine byteartige Rohrleitung zu erstellen, geben Sie PIPE_TYPE_BYTE an oder verwenden Sie den Standardwert . Die Daten werden in die Pipe als Bytestrom geschrieben, und das System unterscheidet nicht zwischen Bytes, die in verschiedene Schreiboperationen geschrieben wurden.

Um eine Nachrichtentyp-Pipe zu erstellen, geben Sie PIPE_TYPE_MESSAGE an. Das System behandelt Bytes, die in jede Schreiboperation geschrieben wurden, an die Pipe als eine Nachricht Einheit. Das System führt immer Schreiboperationen für Nachrichtentyp-Pipes aus, als ob der Durchschreibemodus aktiviert wäre.

Wenn Sie einen Datenstrom in Bezug von Rohren schreiben möchten, sollten Sie PIPE_TYPE_BYTE Typ-Modus verwenden. Dann können Sie beliebige Daten in den Rohrpuffer in Bezug auf WriteFile schreiben und dort auf der anderen Seite in Bezug auf ReadFile lesen. Wie genau die Daten gesendet werden, ist für Sie nicht wichtig. Die Daten von einigen WriteFile Operation kann als ein Datenblock übertragen werden.

Wenn Sie PIPE_TYPE_MESSAGE Typ-Modus verwenden, folgt jeder Schreibvorgang auf die Datenübertragung, weil das Schreiben in der Pipe als ein Senden der Nachricht interpretiert wird. Es gibt eine spezielle Funktion TransactNamedPipe, die es Ihnen ermöglicht, eine Nachricht zu schreiben und eine Nachricht von der angegebenen Named Pipe in eine Netzwerkoperation zu lesen.