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
}
}
}