Russian Qt Forum

Программирование => Общий => Тема начата: crashtua от Август 22, 2012, 19:56



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

Интересуюсь для того, что бы написать свой простой HTTP туннель, вот только не знаю, как устроены соидинения... Написал маленький набросок, на джаве, для кажной новой порции данных пробует заново конектится, для MySql работает:)


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

Интересуюсь для того, что бы написать свой простой HTTP туннель
Не вижу проблемы. Приходит коннект с клиента, пробуем приконнектиться к серверу. В случае успеха гоняем данные (принял от одного сокета, передал в другой). Если словили дисконнект от одной стороны, немедленно дисконнектим другую. Если не надо анализировать протокол, такой подход самый оптимальный. Более того, он вообще не зависит от прикладного уровня - можно гонять всё, что работает по TCP/IP.


Название: Re: Как работают сокеты и сетевые соиденения в разных протоколах
Отправлено: crashtua от Август 23, 2012, 11:20
Вьющимися, буду пробовать. Если напишу толковый вариант, отпишусь.