Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Jolik
Зарегистрирован: 31.03.2004 Сообщения: 56
|
Добавлено: Вс Авг 29 2010 02:05 Заголовок сообщения: Как синхронизируется протокол http... |
|
|
... потребовалось сделать простой http сервер для обмена данными (чтобы пакеты без проблем ходили через маршрутизаторы).
Возник вопрос - а как сервер "узнает", что запрос от клиента поступил полностью? Или он считает, что все что приходит от клиента - это один запрос.
Поясню: вот сидит сервер, слушает порт. Пошли данные... Исходя из принципов TCP/IP - данные приходят частями и размер их в TCP определить не возможно. Так вот идут данные, мы их принимаем, принимаем, принимаем... и складываем в некоторый буфер. А как узнать, что все, данные закончились? По тайм ауту? А вдруг канал слабый и пакет где нить задержался? А вдруг на той стороне злоумышленник? И льет данные и льет...
Приходилось писать свои протоколы - так я в заголовке пакета одно из полей отводил под размер - сразу все понятно, получил заголовок и ждешь указанный размер. Принял - обрабатываешь, не принял - разрываешь по таймауту.
Проясните, если кто может...
Заранее благодарен! |
|
Вернуться к началу |
|
|
alex1983-0112
Зарегистрирован: 22.08.2006 Сообщения: 46 Откуда: г. Семенов Нижегородская обл.
|
Добавлено: Пн Авг 30 2010 19:34 Заголовок сообщения: Re: Как синхронизируется протокол http... |
|
|
Jolik писал(а): | ... потребовалось сделать простой http сервер для обмена данными (чтобы пакеты без проблем ходили через маршрутизаторы).
|
http-серверу, как и http клиенту и знать ничего не надо о маршрутизации - это не его забота, а забота протоколов, что идут ниже прикладного уровня.
Jolik писал(а): |
Возник вопрос - а как сервер "узнает", что запрос от клиента поступил полностью? Или он считает, что все что приходит от клиента - это один запрос.
|
Есть специальные управляющие символы "\r\n", плюс к этому поля уже самого протокола(Content-Length) - по ним определяется.
А вообще по http есть rfc - http://www.w3.org/Protocols/rfc2616/rfc2616.html - его стоит почитать. _________________ #define TRUE FALSE// счастливой отладки |
|
Вернуться к началу |
|
|
and3008
Зарегистрирован: 12.10.2001 Сообщения: 14893 Откуда: Н.Новгород
|
Добавлено: Пн Авг 30 2010 22:37 Заголовок сообщения: |
|
|
Тебе самому надо придумать что является началом полезных данных, а что концом. Эти данные должны передаваться клиентом и приниматься сервером. Если используется передача по TCP, то функция чтения данных вернет либо положительное значение (и в буфере будут полезные данные), либо код ошибки (например разрыв соединения по тайм-ауту). Как доставлять пакет, как проверять не убилось ли чего по дороге - не твоя забота, этим операционная система будет заниматься.
Если будешь использовать UDP, то придется каждый пакет подписывать контрольной суммой или придумывать какие-то другие правила проверки правильности передачи данных, следить за тайм-аутами и прочими вещами.
Написание сетевых приложений несколько меняет привычную логику программирования, которая хорошо подходит для локальных компьютеров. Приходится думать не линейно, а с учетом событий. Отправка пакета - событие, прием пакета - событие, разница между приемом и передачей - событие. Чем раньше вы в это ведите, тем быстрее хороший софт писать научитесь. |
|
Вернуться к началу |
|
|
VeL
Зарегистрирован: 18.01.2006 Сообщения: 521 Откуда: Харьков
|
Добавлено: Вт Авг 31 2010 14:01 Заголовок сообщения: а как в проге которая работает по HTTP сделать авторизацию? |
|
|
Я вот тоже решил по практиковаться с С++ и написать WEB интерфейс к программе.
Меня вот интересует как в программе которая работает по HTTP сделать авторизацию?
Как я себе это представляю, допустим пост запросом передаем переменные логина и пароля, сервер их проверяет, а потом генерит случайную последовательность символов, которую записываем в куки а потом просто проверяем эту запись? Чтот мне как то кажется что это плохой вариант.
На PHP допустим там все просто, там есть механизм сессий, который реализуется на стороне клиента, а вот как он реализован?
Как вообще делают механизм авторизации допустим в таких приложениях как CUPS, SWAT (эти приложения же сами работают с http и веб сервер для них не нужен) которые имеют WEB интерфейс? _________________ Best regards |
|
Вернуться к началу |
|
|
and3008
Зарегистрирован: 12.10.2001 Сообщения: 14893 Откуда: Н.Новгород
|
Добавлено: Вт Авг 31 2010 22:40 Заголовок сообщения: |
|
|
Как-то эта... Путаем HTTP (протокол) и PHP (язык программирования).
В интернете про написание приложений полно примеров. Не надо изобретать велосипед, по крайне мере до тех пор, пока не ознакомитесь с уже существующими моделями. |
|
Вернуться к началу |
|
|
VeL
Зарегистрирован: 18.01.2006 Сообщения: 521 Откуда: Харьков
|
Добавлено: Ср Сен 01 2010 18:27 Заголовок сообщения: |
|
|
Так вот как раз и пытаюсь понять как работает существующая модель.
Да, и в инете везде приводятся примеры авторизации для клиентской программы, как ей отправить пост запрос с формы, а мне нужно реализовать серверную часть.
Т.е. когда сервер получил этот запрос. Потом он его парсит, потом проверяет переданные переменные на предмет правильности логина и пароля. Допустим сервер проверил логин и пароль, они оказались правильными, и сервер в ответ прислал основную страничку сайта.
Ми эту страничку после этоо в браузере увидели.
Дальше допустим кликает на другую ссылку нашего сайта.
Как после этого сервер узнает что браузер уже прошел авторизацию? _________________ Best regards |
|
Вернуться к началу |
|
|
|