Дуплексная работа между сервером и клиентом с использованием именованных каналов - PullRequest
0 голосов
/ 17 октября 2018

Я использую именованный канал для соединения сервера и клиента, который находится на одной машине.Код сервера находится в 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 # в обоих кодах.

...