KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I am using Named Pipes configured to send data as a single byte stream to send serialized data structures between two applications. The serialized data changes in size quite dramatically. On the sending side, this is not a problem, I can adjust the number of bytes to send exactly. How can I set the buffer on the receiveing (Reading) end to the exact number of bytes to read? Is there a way to know how big the data is on the sending (Writing) side is? I have looked at PeekNamedPipe, but the function appears useless for byte typed named pipes? lpBytesLeftThisMessage [out, optional] A pointer to a variable that receives the number of bytes remaining in this message. This parameter will be zero for byte-type named pipes or for anonymous pipes. This parameter can be NULL if no data is to be read. http://msdn.microsoft.com/en-us/library/windows/desktop/aa365779(v=vs.85).aspx How does one handle such a situation best if you cannot determine the exact required buffer size? Sending Code string strData; strData = "ShortLittleString"; DWORD numBytesWritten = 0; result = WriteFile( pipe, // handle to our outbound pipe strData.c_str(), // data to send strData.length(), // length of data to send (bytes) &numBytesWritten, // will store actual amount of data sent NULL // not using overlapped IO ); Reading Code: DWORD numBytesToRead0 = 0; DWORD numBytesToRead1 = 0; DWORD numBytesToRead2 = 0; BOOL result = PeekNamedPipe( pipe, NULL, 42, &numBytesToRead0, &numBytesToRead1, &numBytesToRead2 ); char * buffer ; buffer = new char[numBytesToRead2]; char data[1024]; //1024 is way too big and numBytesToRead2 is always 0 DWORD _numBytesRead = 0; BOOL result = ReadFile( pipe, data, // the data from the pipe
Tags (comma-separated)
Save Edits
Cancel