Russian Qt Forum
Сентябрь 30, 2024, 16:30 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как работают сокеты и сетевые соиденения в разных протоколах  (Прочитано 3667 раз)
crashtua
Гость
« : Август 22, 2012, 19:56 »

Допустим, есть у нас клиент к базе данных MySql, для начала он старается соединиться по порту 3306 с базой, база в свою очередь слушает 3306 порт. Приходит входящее соединение к базе, в итоге получаем входящий и исходящий поток на стороне как сервера так и клиента. Теперь, собственно, вопрос: после отправки данных клиентом, и получения ответа, соединение разрывается(потом, для отправки и получения новой порции даных создается новое подключение)? Или оно постоянно держится открытым? Или возможны различные варианты, в зависимости от протокола и приложений? Как в этом плане работает протокол HTTP? Подключения к той же MySql?

Интересуюсь для того, что бы написать свой простой HTTP туннель, вот только не знаю, как устроены соидинения... Написал маленький набросок, на джаве, для кажной новой порции данных пробует заново конектится, для MySql работает:)
Записан
Serr500
Гость
« Ответ #1 : Август 23, 2012, 08:10 »

Теперь, собственно, вопрос: после отправки данных клиентом, и получения ответа, соединение разрывается(потом, для отправки и получения новой порции даных создается новое подключение)? Или оно постоянно держится открытым? Или возможны различные варианты, в зависимости от протокола и приложений? Как в этом плане работает протокол HTTP? Подключения к той же MySql?
Возможны варианты. Они регламентируются протоколом прикладного уровня. Например, стандартный HTTP посылает запрос, получает ответ и рвёт соединение. Но можно указать в HTTP-запросе "Connection: Keep-Alive" и соединение разрываться не будет (точнее, не должно). Последующие запросы пойдут по тому же соединению. MySQL по умолчанию работает с разрывами: запрос - ответ - разрыв. Но опять-таки можно устанавливать постоянные соединения и гнать по ним серии запросов.

Интересуюсь для того, что бы написать свой простой HTTP туннель
Не вижу проблемы. Приходит коннект с клиента, пробуем приконнектиться к серверу. В случае успеха гоняем данные (принял от одного сокета, передал в другой). Если словили дисконнект от одной стороны, немедленно дисконнектим другую. Если не надо анализировать протокол, такой подход самый оптимальный. Более того, он вообще не зависит от прикладного уровня - можно гонять всё, что работает по TCP/IP.
Записан
crashtua
Гость
« Ответ #2 : Август 23, 2012, 11:20 »

Вьющимися, буду пробовать. Если напишу толковый вариант, отпишусь.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.043 секунд. Запросов: 21.