Я использую связь Namedpipes (С++) для передачи данных между двумя процессами. Для удобства я использую wstring для передачи данных, и в конце передачи все в порядке. Я не могу получить полные данные на принимающей стороне. Ниже приведен код завершения передачи.
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 Может кто-нибудь объяснить мне, почему данные обрезаются.
send_data.str().size()
не должно бытьsend_data.str().size() * sizeof(wchar_t) / sizeof(char)
, поскольку вы отправляете многобайтовые символы? - person NathanOliver   schedule 29.06.2015WriteFile
передаст все, что вы его запросили, и чтоReadFile
вернет именно то содержимое, которое было записано вызовомWriteFile
(если только вы не проверили документацию, чтобы быть уверенным). Многие каналы связи просто так не работают, и судя по аргументам ваших функций, похоже, что этот канал — один из тех, которые не работают. - person   schedule 29.06.2015