http post
От: Аноним  
Дата: 18.04.05 07:57
Оценка:
Добрый день!

Столкнулся с такой проблемой:
Клиент аплоадит файлы по http (wininet). Как исключить потерю данных при обрыве связи?

Если делать так:
-----------------------------------
#define PARTSIZE 4096

gethttpconnection(server, port);
openrequest(HTTP_VERB_POST...);

httpsetrequestEx(...)
for (i = 0; i < parts; i++)
{
chttpfile->write(&partData, PARTSIZE);

waitformultipleobjects(...)
{
//
}

partData += PARTSIZE;
}

endrequest();
-----------------------------------

то, при потере соединения до выполнения endrequest(), запрос не выполняется!



Пробовал по-другому:
(аплоадить каждую часть данных в отдельном http запросе)
-----------------------------------
for (i = 0; i < parts; i++)
{
gethttpconnection(server, port);

openrequest(HTTP_VERB_POST...);
httpsendrequestEx(...);
chttpfile->write(&partData, PARTSIZE);
endrequest();

partData += PARTSIZE;
}
-----------------------------------

— очень медленно Можно конечно большими кусками слать, но...думаю, это не совсем правильный выход.


Кстати, как корректно закрыть соединение. Например, что делать при закрытии приложения, если поток в этот
момент пишет большой блок данных (вся работа по передаче данных ведется в оддельном потоке)?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.