Отмена получения метода в классе Socket c# через TCP - PullRequest
0 голосов
/ 03 мая 2020

Можно ли отменить метод Receive в классе Socket, который получает некоторые данные через TCP-соединение?

У меня есть несколько методов

        public IStateObject Receive()
        {
            IStateObject state;

            string message = ReceiveMessageFromClient();

            if (message.Contains("Transfer-Encoding: chunked"))
            {
                state = new ChunckedState();
            }
            else
            {
                state = new ContentState();
            }

            state.SetHeaders(message);
            state.SetBody(message.Substring(message.IndexOf("\r\n\r\n") + 4));

            ThrowResponse(state);

            while (state.EndResponse() == false)
            {
                if (client == null)
                {
                    ThrowResponse(state);

                    return state;
                }

                message = ReceiveMessageFromClient();

                state.SetBody(message);

                ThrowResponse(state);
            }

            return state;
        }

        private string ReceiveMessageFromClient()
        {
            try
            {
                int BufferSize = 65536 * 2;
                byte[] buffer = new byte[BufferSize];

                int bytes = client.Receive(buffer, buffer.Length, 0);

                return Encoding.UTF8.GetString(buffer, 0, bytes);
            }
            catch (SocketException exception)
            {
                return string.Empty;
            }
        }

Так что метод Receive всегда получает некоторые данные от клиента. И мне нужно закрыть соединение в какой-то момент. Но когда я просто делаю client.Close (); Я ловлю SockeException в методе ReceiveMessageFromClient. Как мне правильно закрыть соединение?

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