Аннотация:
Ещё вчера Вы даже и не думали о написании программ, использующих интернет протоколы, полагая, что это удел web-программистов. Но, уже сегодня перед Вами стоит задача прочитать/записать, передать/принять, получить/послать что-либо из своей программы на какой-либо интернет-сервер. Какие средства для этого существуют Сколько времени уйдёт на их изучение и эксперименты Давайте рассмотрим один из способов, который позволяет решать большинство подобных задач в максимально короткие сроки.
Если нам не помогут, то мы тоже никого не пощадим.
>1. INFO: WinInet Limits Connections Per Server (Q183110). >WinInet ограничивает число соединений для одного сервера, которое может быть равно двум или четырём. >Такое ограничение связано с соглашениями HTTP спецификации и стандарта.
Это ограничение задается ключем в реестре.
И в Windows 2000 значение по умолчанию — 100.
if (fnews.is_open()) for (;) {
// читаем данные
char szData[1024];
DWORD dwBytesRead;
BOOL bRead =
::InternetReadFile(
hRequest,
szData,sizeof(szData)-1,
&dwBytesRead);
// выход из цикла при ошибке или завершении
if (bRead == FALSE || dwBytesRead == 0)
break;
// сохраняем результат
szData[dwBytesRead] = 0;
Тут что, надежды, прочитать больше килобайта, нет? Если файл размером больше или читается не за один заход, то получим только его хвост.
Вот почитал статью про вининет... полезно, но вининет не во всяких виндах есть и не со всяким эксплорером идет, а мне надо чтобы везде работало. Даже винсока второго в старой 95 не было. Приходится довольствоваться первым, но всплыла проблема определения прокси-сервера на системах где стоит галка "автоопределение" :(
И что-то никак у меня не получается добиться прокси от вининета. Т.е. заставить его коннектиться с текущими настройками я могу, но переделывать программу, уже работающую... делить ее на две ветки одну для винсока, другую для вининета не очень то хочется, а где забрать настройки прокси я так и не понял :(
Ничего он не даёт, только геморой. Для FTP может что-то и даёт, для HTTP я не нашёл ни одного толкового примера, что подтвердило мою версию о том, что HTTP и асинхронный режим не дружат.
Поэтому я в статью это даже и не включал. Лучше использовать многозадаяность. Если я не прав с радостью выслушаю любую информацию по этому поводу, а лучше хороший пример.
Это очень плохо.
У меня всё работает и через прокси и без.
Если работает в браузере, то должно работать и через WinInet, если нет, то у тебя неправильный WinInet ;)
Попробуй ещё поставить rd.SetDataBuffer(20*1024); перед чтением, может быть нулевая длинна возвращается не только из-за неправильной работы сервера, но и клиента.
Спасибо! А чего там чекать, WinInet как WinInet :o)
А вообще-то, каждый архив проекта в каталоге Release содержит собранную программу, проверенную доступными антивирусными средствами и готовую к исполнению. Запуск примеров много времени не займёт.
Happy coding,
Игорь.
calc.cpp(23) : error C2679: binary '<<' : no operator defined which takes a right-hand operand of type 'class _bstr_t' (or there is no acceptable conversion)
горе мне горе, и WinInet у меня не правильный и VC (№6+SP5+STLPort) :-(
С (LPCTSTR) конечно все прошло, но вот где берут cout, которые и без этого работают?
Ладно, ближе к телу. Дело видимо все-таки в том что выход через мой прокси по паролю. Поскольку calc его нигде не спрашивает, то в
char *data = rd.GetData();
я получаю страничку с Cache Access Denied и т.д. и т.п