C# NamedPipeServerStream Пинг-понг

Я пытаюсь создать серверное и клиентское приложение с помощью NamedPipeServerStream и NamedPipeClientStream, позвольте мне объяснить, что я хочу сделать:

-Будет сервер -Будет много клиентов -Каждый клиент подключается к серверу -Каждый клиент отправляет сообщения на сервер, а сервер отправляет результат. Предположим, что происходит рукопожатие между сервером и клиентом. Насколько я знаю, если вы подключаете клиента к серверу, используя NamedPipeClientStream и NamedPipeServerStream, между ними есть путь двунаправленный, поэтому после подключения клиента к серверу также сервер доступен для отправки сообщения клиенту, но я не работаю. Клиент отправляет сообщение на сервер, после чего сервер получает сообщение и отправляет его обратно клиенту. Однако сервер не может отправить. Пожалуйста, проверьте, где проблема? Благодарю вас

Коды сервера

 class Program
{
    static NamedPipeServerStream serverPipe;
    static byte[] buffer = new byte[1024];
    static void Main(string[] args)
    {
        serverPipe = new NamedPipeServerStream("myPipe", PipeDirection.InOut, 100, PipeTransmissionMode.Byte, PipeOptions.Asynchronous);
        serverPipe.BeginWaitForConnection(new AsyncCallback(GetClient), serverPipe);
        Console.ReadLine();            
    }

    public static void GetClient(IAsyncResult result)
    {          
        serverPipe = (NamedPipeServerStream)result.AsyncState;
        serverPipe.EndWaitForConnection(result);
        serverPipe.BeginRead(buffer, 0, 1024, new AsyncCallback(GetMessage), serverPipe);            
    }

    public static void GetMessage(IAsyncResult result)
    {           
        int length=serverPipe.EndRead(result);
        string stringResult=UTF8Encoding.UTF8.GetString(buffer);
        Console.WriteLine("Client says: " + stringResult);
        //server write throws exception, if i even make clients status to begin read
        serverPipe.Write(buffer, 0, buffer.Length);
    }
}

Коды клиентов:

    //CLIENT
class Program
{
    static NamedPipeClientStream clientPipe;
    static void Main(string[] args)
    {
        clientPipe = new NamedPipeClientStream("myPipe");

        if (!clientPipe.IsConnected)
        {
            clientPipe.Connect();
        }

        Console.WriteLine("Session started");
        while (true)
        {
            string message = Console.ReadLine();
            byte[] byteArray = Encoding.UTF8.GetBytes(message);
            clientPipe.Write(byteArray, 0, byteArray.Length);
            //should it be a beginread here ? it is also did not work . there is something wrong with  in serverPipe.Write() in servers code

        }
    }
}

0 ответов

Другие вопросы по тегам