Я использую именованный канал для соединения сервера и клиента, который находится на одной машине.Код сервера находится в PowerShell, а код клиента - в C #.
Код сервера:
$pipe = new-object System.IO.Pipes.NamedPipeServerStream('testpipe',[System.IO.Pipes.PipeDirection]::InOut)
$pipe.WaitForConnection()
$sw = new-object System.IO.StreamWriter $pipe
$sw.WriteLine('Jane')
$sw.Dispose()
$sr = new-object System.IO.StreamReader $pipe
$val = $sr.ReadLine()
$val
$sr.Dispose()
$pipe.Dispose()
Код клиента:
NamedPipeClientStream client = new NamedPipeClientStream(".", "testpipe", PipeDirection.InOut, PipeOptions.None);
client.Connect();
StreamReader reader = new StreamReader(client);
string temp = reader.ReadLine();
TBox_Name.Text = name;
reader.Dispose();
StreamWriter writer = new StreamWriter(client);
writer.WriteLine("Hello World");
writer.Dispose();
client.Dispose();
В то время как исходное сообщение от сервера доставляетсяклиенту сообщение от клиента к серверу завершается с ошибкой $val = $sr.ReadLine()
на сервере.Это показывает исключение Exception calling "ReadLine" with "0" argument(s): "Cannot access a closed pipe."
Я обнаружил похожую проблему в дуплексной операции между двумя процессами, использующими именованные каналы в c # .Но они используют C # в обоих кодах.