2010-08-22 2 views
5

Anche se ho passare attraverso il documento here, ancora non ha senso per me quello che è:Puoi spiegare più in dettaglio qual è la differenza tra PIPE_READMODE_MESSAGE/PIPE_READMODE_BYTE?

I dati vengono letti dalla pipe come un flusso di messaggi. Questa modalità può essere solo utilizzata se PIPE_TYPE_MESSAGE è anche specificato.

+0

Post correlati: http://stackoverflow.com/questions/4514784/pipetransmissionmode-message-how-do-net-named-pipes-distinguish-between-messag –

risposta

3

In modalità BYTE, sei quello che ha bisogno di capire la separazione dei dati in modo che possa essere decodificato dal lato ricevente. In modalità MESSAGGIO, l'API farà questo per te. Quando leggi il messaggio dall'altra parte avrai l'intero blocco di dati (il messaggio).

In entrambi i casi, saranno ancora necessari alcuni dati di intestazione per avvolgere il messaggio/i dati per sapere di cosa si tratta se si stanno mixando i tipi di dati inviati attraverso la pipe.

MODIFICA: la documentazione fa riferimento a un esempio molto chiaro di client/server che utilizza questa API e la modalità MESSAGGIO tra entrambi.

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

Puoi illustrare con un esempio? – user198729

+0

Modificato per includere un esempio – David

0

La differenza tra la modalità tipo PIPE_TYPE_BYTE e PIPE_TYPE_MESSAGE vengono spiegate http://msdn.microsoft.com/en-us/library/aa365605.aspx: quanti dati

Modo Tipo

il modo del tipo di un tubo determina è scritto in una named pipe I dati possono essere trasmessi attraverso una pipe denominata come flusso di byte o come un flusso di messaggi. Il server pipe specifica il tipo di pipe quando si chiama CreateNamedPipe per creare un'istanza di una named pipe. Le modalità tipo devono essere uguali per tutte le istanze di una pipe .

Per creare una pipe di tipo byte, specificare PIPE_TYPE_BYTE o utilizzare il valore predefinito . I dati vengono scritti nella pipe come flusso di byte e il sistema non distingue tra i byte scritti in diverse operazioni di scrittura .

Per creare una pipe di tipo messaggio, specificare PIPE_TYPE_MESSAGE. Il sistema tratta i byte scritti in ogni operazione di scrittura nella pipe come messaggio unità. Il sistema esegue sempre le operazioni di scrittura sulle pipe di tipo messaggio come se la modalità write-through fosse abilitata.

Se si vuole scrivere un flusso di dati rispetto dei tubi è necessario utilizzare la modalità PIPE_TYPE_BYTE tipo. Quindi è possibile scrivere tutti i dati nel buffer di tubi in relazione a WriteFile e leggerli sull'altro lato rispetto a ReadFile. Come esattamente i dati verranno inviati non è importante per te. I dati di alcune operazioni di WriteFile possono essere trasferiti come un unico blocco di dati.

Se si utilizza la modalità di tipo PIPE_TYPE_MESSAGE ogni operazione di scrittura segue al trasferimento dati, poiché la scrittura nella pipe verrà interpretata come un invio del messaggio. È disponibile una funzione speciale TransactNamedPipe che consente di scrivere un messaggio e leggere un messaggio dalla named pipe specificata in un'operazione di rete singola .