Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

SSL и TCP

33K
12 мая 2008 года
Padavan1
15 / / 07.05.2008
Здравствуйте!

Необходимо реализовать соединение с сервером с использованием SSL.
Реализую это на основе TcpClient и SslStream. На сколько я понимаю прием достаточно распространенный и проблем особых возникнуть вроде как не должно... но столкнулся с такой проблемой: соединение устанавливается нормально, аутентификация проходит тоже нормально, данные на сервер отправляются без проблем, НО ответ от сервера не приходит... точнее приходит, но пустой. Общался с "другой стороной" (сервер), там сказали, что от меня они запрос получают нормально, но при попытке ответить мне сессия отключается... вот как то вот так...

код был почти полностью списан с msdn

буду благодарен любым мыслям, тк самому найти косяк не получается
5
12 мая 2008 года
hardcase
4.5K / / 09.08.2005
Код в студию!
33K
13 мая 2008 года
Padavan1
15 / / 07.05.2008
Код:
public static string GetResponse(string  message, ConfigInfo cfg)
        {[INDENT]             TcpClient tcpClient = new TcpClient(cfg.GWAddress, int.Parse(cfg.GWPort));
            SslStream sslStream = new SslStream(
                tcpClient.GetStream(),
                false,
                ValidateServerCertificate,
                SelectLocalCertificate);
            // The server name must match the name on the server certificate.
            try
[/INDENT][INDENT]             {[INDENT]                 X509Certificate cert =new X509Certificate(CertPath,CertPsw);
                X509CertificateCollection cerCol=new X509CertificateCollection();
                cerCol.Add(cert);
                sslStream.AuthenticateAsClient(cfg.GWAddress,cerCol,SslProtocols.Ssl3,false);
[/INDENT]}
            catch (AuthenticationException e)
            {[INDENT]                 Console.WriteLine("Exception: {0}", e.Message);
                if (e.InnerException != null)
[/INDENT]{
                    Console.WriteLine("Inner exception: {0}", e.InnerException.Message);
                }[INDENT]                 Console.WriteLine("Authentication failed - closing the connection.");
                tcpClient.Close();
                return null;
[/INDENT]}
            // Encode a test message into a byte array.
            byte[] messsage = Encoding.UTF8.GetBytes(message);
            sslStream.Write(messsage);
            sslStream.Flush();
            // Read message from the server.
            string serverMessage = ReadMessage(sslStream);
            Console.WriteLine("Server says: {0}", serverMessage);
            // Close the client connection.
            tcpClient.Close();
            Console.WriteLine("Client closed.");
            return serverMessage;
[/INDENT]}

static string ReadMessage(SslStream sslStream)
{
           
            byte[] buffer = new byte[2048];
            StringBuilder messageData = new StringBuilder();
           
            int bytes = -1;
            sslStream.ReadTimeout =60000;
            // Use Decoder class to convert from bytes to UTF8
            // in case a character spans two buffers.

            do
            {
                bytes = sslStream.Read(buffer, 0, buffer.Length);

                // Use Decoder class to convert from bytes to UTF8
                // in case a character spans two buffers.
                Decoder decoder = Encoding.UTF8.GetDecoder();
                char[] chars = new char[decoder.GetCharCount(buffer, 0, bytes)];
                decoder.GetChars(buffer, 0, bytes, chars, 0);
                messageData.Append(chars);
                // Check for EOF.
                //if (messageData.ToString().IndexOf("<EOF>") != -1)
                //{
                //    break;
                //}
            } while (bytes != 0);

            return messageData.ToString();
}
33K
13 мая 2008 года
Padavan1
15 / / 07.05.2008
причем отправка идет нормально, а когда получаю ответ он либо ждет до таймаута и вылетает в Exception либо просто получает 0 байт.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог