Я ищу хороший образец, где NamedPipeServerStream и NamedPipeServerClient могут отправлять сообщения друг другу (когда PipeDirection = PipeDirection.InOut для обоих). На данный момент я нашел только эту статью msdn. Но он описывает только сервер. Кто-нибудь знает, как должен выглядеть клиент, подключающийся к этому серверу?
Образец в NamedPipeServerStream vs NamedPipeServerClient с PipeDirection.InOut необходимо
Ответ 1
Что происходит, когда сервер сидит в ожидании соединения, когда он имеет один, он отправляет строку "Ожидание" в качестве простого рукопожатия, тогда клиент читает это и тестирует, а затем отправляет обратно строку "Test Message" (в мое приложение это на самом деле командной строки args).
Помните, что WaitForConnection
блокируется, поэтому вы, вероятно, захотите запустить его в отдельном потоке.
class NamedPipeExample
{
private void client() {
var pipeClient = new NamedPipeClientStream(".",
"testpipe", PipeDirection.InOut, PipeOptions.None);
if (pipeClient.IsConnected != true) { pipeClient.Connect(); }
StreamReader sr = new StreamReader(pipeClient);
StreamWriter sw = new StreamWriter(pipeClient);
string temp;
temp = sr.ReadLine();
if (temp == "Waiting") {
try {
sw.WriteLine("Test Message");
sw.Flush();
pipeClient.Close();
}
catch (Exception ex) { throw ex; }
}
}
Тот же класс, метод сервера
private void server() {
var pipeServer = new NamedPipeServerStream("testpipe", PipeDirection.InOut, 4);
StreamReader sr = new StreamReader(pipeServer);
StreamWriter sw = new StreamWriter(pipeServer);
do {
try {
pipeServer.WaitForConnection();
string test;
sw.WriteLine("Waiting");
sw.Flush();
pipeServer.WaitForPipeDrain();
test = sr.ReadLine();
Console.WriteLine(test);
}
catch (Exception ex) { throw ex; }
finally {
pipeServer.WaitForPipeDrain();
if (pipeServer.IsConnected) { pipeServer.Disconnect(); }
}
} while (true);
}
}