Кто отключает розетку - PullRequest
       8

Кто отключает розетку

1 голос
/ 03 декабря 2010

У меня есть приложение сокета сервера / клиента, и из примеров на http://msdn.microsoft.com/en-us/library/6y0e13d3.aspx видно, что сервер и клиент отключены и закрывают соединения после получения данных. Это правильно? Я использовал разъединение, но не смог открыть соединение, но использовал shutdown / close:

            if (_sender.Connected)
            {
                _sender.Shutdown(SocketShutdown.Both);
                _sender.Close();
            }

, кажется, работает нормально. Но должно ли это вызываться как на клиентском (инициатор), так и на сервере (получатель) сокетах? Спасибо

Ответы [ 2 ]

1 голос
/ 03 декабря 2010

Это необходимо сделать как на клиенте, так и на сервере, поскольку они оба используют независимые ресурсы.Сокеты могут запутаться (множество исключений) при их отключении, поэтому вы должны убедиться, что вы обрабатываете исключения как на клиенте, так и на сервере.

0 голосов
/ 03 декабря 2010

Неважно, с какой стороны начинается закрытие.Если закрытие происходит чисто, то следующая операция чтения другой стороны будет читать 0 байтов.Если закрытие не происходит чисто, то следующая операция чтения другой стороны вызовет исключение.

В целом, всегда полезно ожидать исключений от любых методов сокетов (кроме Close, который выигралне поднимать исключения за исключением фатальных исключений ).Всякий раз, когда вы видите исключение, просто позвоните Close.

PS Connected - бесполезно, и Shutdown ничего в этом случае не принесетПросто позвоните Close.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...