Вопрос

При чтении с сервера 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 голец.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top