Подтвердить что ты не робот

Образец в NamedPipeServerStream vs NamedPipeServerClient с PipeDirection.InOut необходимо

Я ищу хороший образец, где NamedPipeServerStream и NamedPipeServerClient могут отправлять сообщения друг другу (когда PipeDirection = PipeDirection.InOut для обоих). На данный момент я нашел только эту статью msdn. Но он описывает только сервер. Кто-нибудь знает, как должен выглядеть клиент, подключающийся к этому серверу?

4b9b3361

Ответ 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);
  }
}