Программа «веб-браузер» работает в Windows, но не в Linux - PullRequest
0 голосов
/ 15 февраля 2011

Я не собираюсь публиковать свой код, это для школьного проекта, и я не хочу рисковать копированием моего кода. При этом я не ожидаю конкретного ответа, но любые мысли будут оценены.

Во всяком случае, мое назначение было следующим: я полагаю, имитировать веб-браузер в терминале. Пользователь предоставляет IP-адрес, путь к файлу и номер порта. Затем мне нужно создать запрос get, отправить его на сервер и проанализировать длину содержимого файла из ответа. Наконец, я должен использовать длину содержимого для подсчета байтов, которые я читаю в файле, чтобы я знал, когда чтение завершено. Все эти данные должны быть записаны в HTML-файл.

Странная часть в том, что я начал работать над этим на своей домашней машине (Linux) и смог проанализировать длину содержимого и очередь в начале файла html и начать чтение. После каждого чтения я вычитаю количество байтов из длины содержимого, а когда обнуляю, я не прочитал весь файл. Однако, если я запускаю это на одной из школьных машин (Windows использует cygwin), он читает весь файл.

Я отладил, используя распечатки отчетов, и подтвердил, что правильно анализирую длину содержимого, и отсчет времени работает. Это заставляет меня чесать голову. Есть идеи?

Спасибо

Ответы [ 2 ]

1 голос
/ 15 февраля 2011

Как определить, что вы не прочитали весь файл? Вы полагаетесь на EOF? Если да, знаете ли вы о постоянстве соединения HTTP / 1.1?

0 голосов
/ 15 февраля 2011

Скорее всего, библиотека stdio, которую вы используете в Windows, выполняет переводы любых комбинаций CR-LF в данных. Проверьте руководство вашего компилятора на функцию open и убедитесь, что режим является двоичным. Это классическая проблема переноса, которая требует компиляции другого кода с использованием ifdefs.

Проверьте, поддерживает ли ваш компилятор Windows постоянную типа WIN32, которую вы можете использовать следующим образом

#if defined(WIN32)
   /* do this */
#else
   /* do that */
#endif
...