2009-11-03 2 views
0

При чтении с сервера NamedPipes с использованием .net NamedPipeClientStream класс Я могу получить данные только при первом чтении на C++, каждый раз, когда это просто пустая строка. В C# он работает каждый раз.Проблема NamedPipeClientStream StreamReader в 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(); 
+0

Эта проблема, похоже, связана с формами окон, а не с ++. Запуск того же кода в консольном приложении я не вижу той же проблемы. –

ответ

0

Проблема была связана с нулевым терминатором C++. NamedPipes сервер посылает к примеру

"Hello World! \ П \ 0"

На первом проходе это будет отправить

"Hello World! \ П" оставляя \ 0 в трубе. На subsequents посылает это будет tranmit

"\ 0Hello World! \ П"

C# получит всю строку в то время как C++ будет завершить строку в \ 0 полукокса.

Смежные вопросы