Приветствую. Есть lwip для lm3s9b92 из примера StellarisWare. В примере использован метод GET, требуется реализовать метод POST для передачи файлов. Размер файла значительно превышает размер окна. Как я понимаю, необходимо сделать примерно следующее (метод POST вписал в пример туда же, где обработка GET): http_recv -> tcp_recved -> декодировать POST -> tcp->write(200 OK)-> [принимать данные.] [Принимать данные]: while(не кончился контент) {http_recv -> tcp_recved -> tcp_write(WHAT?)} Функция tcp_write(WHAT?) или какая-либо другая должна сообщить уровню ТСР, что можно послать АСК и принять следующую порцию данных.
ЧТО именно нужно посылать функцией tcp_write, чтобы подтвердить принятые данные и начать получать следующие? Пробовал посылать данные нулевой длины - возникает постоянный duplicate ack при анализе wireshark'ом. Если посылать 200 ОК, то рвётся соединение. Если вообще ничего не посылать - ничего не происходит, соединение рвётся по таймауту (т.е.одной tcp_recved) недостаточно. Может, надо использовать не tcp_write, а другую функцию - тогда какую?
Примеров с POST или с приёмом более одного окна я не нашёл. С lwip и сетевыми протоколами ранее не работал.
Прошу подсказать, как надо правильно это делать.
Сообщение отредактировал H90 - Dec 27 2010, 07:12
|