![]() |
Модераторы: feodorv |
![]() ![]() ![]() |
|
bugmenot |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 135 Регистрация: 3.7.2006 Репутация: нет Всего: 1 |
Вот небольшая програма, которая должна читать страницу forum.vingrad.ru/index.php (код в конце поста)
Вроде работает, но приходит по чистям (с этим проблем нет), и в каждой части на верх добавляется такая фигня:
Че это такое? Какой у этой фигни формат? Искал инфу про нее, не нашел Ну и еще вопрос
^ Что сюда еще можно/нужно писать? Вот код:
Большое спасибо --------------------
доска объявленийвсе о горных велосипедах |
||||||
|
|||||||
ptr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 9 Всего: 14 |
Это заголовок ответа сервера. Если бы ты читал описание протокола, то знал бы, что это такое. Всё согласно спецификации протокола ![]() Описание протокола можешь найти тут. -------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
|||
|
||||
bugmenot |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 135 Регистрация: 3.7.2006 Репутация: нет Всего: 1 |
Вот написал такую прогу, которая записывает forum.vingrad.ru/index.php в test.html (внизу)
Функцию ApplyHtmlToFile написал сам, и наверно там очень много ошибок, но вроде работает =) Скажите пожалуйста все ли ОК, что можно исправить, оптимизировать итд. И еще вопрос: Если я хочу сохранить страницу в памяти, как лучше всего это сделать? Идея юзать LocalReAlloc сто раз мне не нравится, плиз посоветуйте Спасибо! =)
Присоединённый файл ( Кол-во скачиваний: 18 ) ![]() --------------------
доска объявленийвсе о горных велосипедах |
|||
|
||||
ptr |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 9 Всего: 14 |
Как-то плохо работает. Программа на ней падает постоянно.
Не хорошо в качестве SOCKET возвращать NULL. Везде, где в main обрабатываешь ошибки забываешь делать closesocket. -------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
||||
|
|||||
bugmenot |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 135 Регистрация: 3.7.2006 Репутация: нет Всего: 1 |
В смымле вылетает? У меня нормально работает Почему не хорошо? NULL это ноль - 0, т.е. произошла ошибка
Спасибо
![]() --------------------
доска объявленийвсе о горных велосипедах |
||||
|
|||||
ptr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 9 Всего: 14 |
В прямой смысле. В 100% запусков происходит Access Violation. Да NULL - ноль, но кто тебе сказал, что для SOCKET это допустимо. Некоторые компиляторы на NULL будут ругаться. С SOCKET лучше работать как с непрозрачным типом, в твоём случае, например, можешь вернуть тот же INVALID_SOCKET.
Так или иначе тебе придётся в памяти создавать некоторый буфер и там хранить содержимое. Ну и соответсвенно уметь изменять размеры буфера. -------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
|||
|
||||
PyAlexey |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 19.9.2006 Где: Россия, Нижний Но вгород Репутация: нет Всего: 7 |
Помогите разобраться.
Я полный NULL в C++, да не программист вообще. Но вот решил поэксперементировать, написав простенький downloader. Короче, нашёл в инете пример работы с сокетами. Но, аналогично проблеме у автора топика, сервер в случае html выдаёт сначала заголовок, а потом сам текст; а в случае бинарного файла - только заголовок. Как я понимаю, здесь проблема либо в формировании запроса, либо в чтении из сокета. Запрос:
Чтение из сокета:
Как мне получить текстовый и бинарный файл без заголовка? P.S. Просьба не отсылать к чтению спецификации - мне пока этого не требуется. |
||||
|
|||||
ptr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 9 Всего: 14 |
1. Показывай ответы сервера.
2. Не забывай про \r\n. -------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
|||
|
||||
PyAlexey |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 19.9.2006 Где: Россия, Нижний Но вгород Репутация: нет Всего: 7 |
Если запрашивать страницу, то всё нормально, за исключением ненужного мне заголовка.
Если запрашивать бинарный файл, то выдаётся только заголовок - и всё, программа удачно завершается.
Если использовать \r\n вместо \n и \n\n, то всё останавливается на чтении из сокета... (( P.S. Вот пример, который я использовал. Это сообщение отредактировал(а) PyAlexey - 14.2.2007, 17:08 |
||||
|
|||||
ptr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 9 Всего: 14 |
Этот заголовок очень даже нужный. Он содержит много полезной информации. Никак. Ты сначала должен получить заголовок, проанализировать его (распарсить, посмотреть нет ли ошибок и т.д.) и уже потом получать всё остальное. Посмотри в отладчике (ну или обычным printf) что происходит в данный момент (например что возвращает recv). Перевод строки должен быть \r\n. Интересно знать в какой раз автор работает с сокетами, да и вообще программирует ![]() ![]() PyAlexey, а что ты хочешь написать то? Это сообщение отредактировал(а) ptr - 15.2.2007, 19:03 -------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Сети | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |