Исключение, создаваемое BeginWaitForConnection при повторном использовании NamedPipeServerStream в .NET 4 после отключения клиента - PullRequest
5 голосов
/ 18 мая 2011

Я пытаюсь использовать NamedPipeServerStream для создания сервера именованных каналов в .Net 4. Я использую BeginWaitForConnection для ожидания соединения, чтобы я мог прервать ожидание, если сервер будет закрыт вниз.

Все работает хорошо для первого клиента - соединение подтверждено, данные получены, а ответ отправлен. Однако после отключения клиента все ломается. Я снова звоню BeginWaitForConnection, чтобы дождаться нового соединения, но это выдает IOException о том, что "канал разорван".

Как мне ждать второго клиента на том же канале?

Ответы [ 2 ]

5 голосов
/ 18 мая 2011

Создайте новый экземпляр NamedPipeServerStream с указанием того же канала и вызовите BeginWaitForConnection для этого.

т.е. не пытайтесь повторно использовать объект NamedPipeServerStream для разных клиентов: один экземпляр должен обслуживатьодно клиентское соединение / разговор, затем будет утилизирован.

См. также Многопоточный сервер NamePipeServer в C #

0 голосов
/ 10 августа 2016

Другой метод при использовании конфигурации одного клиента / сервера - Disconnect поток канала, когда клиент отключается для очистки канала.Это позволяет повторно использовать трубу.Когда вы снова позвоните BeginWaitForConnection, он начнет принимать соединения.

while (true) 
{
    pipe.BeginWaitForConnection();
    // read and write to pipe
    // catch exception when client disconnects
    pipe.Disconnect();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...