Проблема с NamedPipeClientStream StreamReader в C ++
-
13-09-2019 - |
Вопрос
При чтении с сервера NamedPipes с использованием .net Поток NamedPipeClientStream класс I может получать данные только при первом чтении на C ++, каждый раз это просто пустая строка.В c # это работает каждый раз.
pipeClient = gcnew NamedPipeClientStream(".", "Server_OUT", PipeDirection::In);
try
{
pipeClient->Connect();
}
catch(TimeoutException^ e)
{
// swallow
}
StreamReader^ sr = gcnew StreamReader(pipeClient);
String^ temp;
while (temp = sr->ReadLine())
{
// = sr->ReadLine();
Console::WriteLine("Received from server: {0}", temp);
}
sr->Close();
Решение
Проблема была связана с C ++ null terminator .Сервер NamedPipes отправлял, например,
"Привет, мир! \0"
При первом проходе это отправило бы
"Привет, Мир! " уходя \0 в трубе.При последующих отправках это будет передаваться
"\0Хелло, Мир! "
C # получил бы всю строку, в то время как c ++ завершил бы строку в \0 голец.
Не связан с StackOverflow