Я использую связь Namedpipes (C++) для передачи данных между двумя процессами. Ради удобства я использую wstring для передачи данных, и все отлично в конце передачи. Я не могу получить итоговые данные на принимающей стороне. Ниже приведен код передачи.wstring to wchar_t conversion
wstringstream send_data;
send_data << "10" << " " << "20" << " " << "30" << " " << "40" << " " << "50" << " " << "60" << "\0" ;
DWORD numBytesWritten = 0;
result = WriteFile(
pipe, // handle to our outbound pipe
send_data.str().c_str(), // data to send
send_data.str().size(), // length of data to send (bytes)
&numBytesWritten, // will store actual amount of data sent
NULL // not using overlapped IO
);
Приведенный конечный код приема.
wchar_t buffer[128];
DWORD numBytesRead = 0;
BOOL result = ReadFile(
pipe,
buffer, // the data from the pipe will be put here
127 * sizeof(wchar_t), // number of bytes allocated
&numBytesRead, // this will store number of bytes actually read
NULL // not using overlapped IO
);
if (result) {
buffer[numBytesRead/sizeof(wchar_t)] = '\0'; // null terminate the string
wcout << "Number of bytes read: " << numBytesRead << endl;
wcout << "Message: " << buffer << endl;
}
В результате в буфере содержится только 10 20 30 Может кто-то пожалуйста, объясните мне, почему данные будут усечены.
Вы уверены, что данные усечены? Кажется, вы не проверяете трубку, чтобы увидеть, осталось ли что-нибудь, ожидая, чтобы ее прочитали. Вы также не видите, чтобы проверить, написано ли вы столько байтов, сколько вы думаете, что вы написали. – Hurkyl
Имея чтение из какого-то потока, вы не должны ожидать определенного размера (он может быть меньше или даже равен нулю). React on some error или eof condition –
Не следует 'send_data.str(). Size()' be 'send_data.str(). Size() * sizeof (wchar_t)/sizeof (char)', поскольку вы отправляете многобайтовые символы ? – NathanOliver