C #: асинхронное понимание NamedPipeServerStream
Я пытался найти какой-либо хороший и понятный пример асинхронного NamedPipeServerStream и не смог найти подходящий для меня.
Я хочу иметь NamedPipe Server, который асинхронно принимает сообщения от клиентов. Клиент прост, и это хорошо для меня. Но я не могу найти примеры серверов или не могу понять, как они работают.
Теперь, как я понимаю, мне нужно создать объект NamedPipeServerStream. Давайте сделаем это:
namedPipeServerStream = new NamedPipeServerStream(PIPENAME, PipeDirection.In, 1, PipeTransmissionMode.Byte, PipeOptions.Asynchronous, BUFFERSIZE, BUFFERSIZE);
Кажется, работает.But I don't know, do I have to use PipeSecurity or PipeAccessRule at all? Do I? Мой сервер будет работать как служба Windows в локальной системе.
Что дальше? Я думаю, мне нужно использовать BeginWaitForConnection для асинхронных соединений. Давайте посмотрим:
namedPipeServerStream.BeginWaitForConnection(WaitForConnectionAsyncCallback, <some strange thing>);
Question 1Что это за "какая-то странная вещь"? Как это использовать?
Question 2: Я должен делать
while(true)
{
namedPipeServerStream.BeginWaitForConnection(WaitForConnectionAsyncCallback, <some strange thing>);
}
Чтобы мой сервер всегда ждал соединения? Или мне нужно сделать это как-нибудь еще?
А потом ... Давайте посмотрим на функцию WaitForConnectionAsyncCallback:
private void WaitForConnectionAsyncCallback(IAsyncResult result)
{
Console.WriteLine("Client connected.");
byte[] buff = new byte[BUFFERSIZE];
namedPipeServerStream.Read(buff, 0, namedPipeServerStream.InBufferSize);
string recStr = General.Iso88591Encoding.GetString(buff, 0, namedPipeServerStream.InBufferSize);
Console.WriteLine(" " + recStr);
namedPipeServerStream.EndWaitForConnection(result);
}
..Это, конечно, не работает. Так какI don't know how exactly to receive string from stream. How? Теперь это вызывает InvalidOperationException:
Pipe hasn't been connected yet.
Итак, как организовать асинхронную работу с NamedPipeServerStream?