Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > С/С++
Перезагрузить страницу Как узнать правильный объем передаваемых данных
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
rarelang rarelang вне форума
Member
 
Сообщений: 14
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 07.04.2004
По умолчанию Как узнать правильный объем передаваемых данных - 08.05.2004, 02:37

Добрый день!

Я создаю CGI приложение с использованием C++ (основное требование к используемым в приложении технологиям,- это чтобы приложение было написано на C++ и легко портировалось как под Win32 так и под UNIX FreeBSD). У меня возникает проблема при попытке получения данных отсылаемых клиентом с использованием метода POST (цель получить набор заполненных данных и присоединенный файл). Проблема заключается в том что getenv("CONTENT_LENGTH") возвращает некорректное число байт передаваемых на stdin в случае если пользователь оставляет пустым поле <INPUT type="file" ...>. В случае же наличия выбора файла getenv("CONTENT_LENGTH") возвращает правильное количество переданных клиентом байт (т.е. проблема возникает только в ситуации, когда поле <INPUT type="file" ...> оставлено пустым).

Для считывания данных отсылаемых клиентом я использую следующий код:

Код:
int x = atoi(getenv("CONTENT_LENGTH"));
char *str = new char [x];
for(int i=0;i<x;i++)
        str[i] = getchar();
Данные клиента получаются с использованием следующей HTML формы:

Код:
<form>
<action="http://localhost/(название CGI приложения)" method="post" enctype="multipart/form-data">
<INPUT id="File1" type="file" name="file1">
<INPUT id="Submit1" type="submit" value="Зарегистрироваться" name="Submit1">
<INPUT id="Text1" type="text" size="33" name="ICQ">
</form>
При получении данных CGI приложением при условии что клиент оставил пустым поле <INPUT type="file" ...>, getenv("CONTENT_LENGTH") (под управлением IIS) возвращает значение на ~68 байт больше действительного размера передаваемых данных, и таким образом getchar() просто зависает при попытке считать данные отсутствующие в потоке ввода. Примечательно то, что поток данных принятых CGI приложением не содержит ошибок т.е. складывается впечатление что вся проблема в getenv("CONTENT_LENGTH") который возвращает неправильное (большее) число байт, чем на самом деле.

Подскажите мне, пожалуйста, в чем заключается проблема и каким образом я могу узнать правильный объем передаваемых данных в случае отсутствия выбора файла?

Заранее спасибо.

C уважением
Павел Донцов
birkoff@ua.fm
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Правильный обжим витой пары wildtaboo Любые вопросы от новичков 1 24.01.2012 12:20
Как узнать размер mp3 файла, исходя из данных, записаных в его заголовке AZzz C++ Builder 0 07.04.2008 02:17
Не отображается правильный объем памяти. Raphus Техническая поддержка 16 23.04.2007 22:13
Где узнать названия алгоритма сжатия данных без потерь s7s Алгоритмы 3 18.04.2007 03:11
Запрос на выборку нужен результат узнать имя базы данных Ganzales SQL 2 02.10.2006 00:31
Как программным путем можно узнать имя таблицы в базе данных Access BD Visual C++ 1 02.05.2006 18:38
Как составить правильный алгоритм рак-щука imported_ork Алгоритмы 1 22.11.2005 18:57
Как можно средствами MFC + DAO узнать количество таблиц в базе данных krutoj_pablo Visual C++ 0 07.06.2005 21:56
Как узнать список баз данных в MSSQLServer vanya C++ Builder 5 19.10.2004 19:14
Как узнать номер блоков данных ivajob C++ на Unix 0 13.09.2004 12:13
Как узнать полный объем ОЗУ MIGHTY C@T Assembler 4 27.05.2004 23:43
Есть ли отличие в сообщениях передаваемых 16-разрядным приложениям и обычным 32 Anonymous Visual C++ 0 14.03.2003 14:55



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов