Существует сервер, который Ответные файл .png над HTTP:повышение :: ASIO передачу файлов
#include "server.h"
string Server::header(int contentLength)
{
string h =
"HTTP/1.1 200 OK\n"
"Content-Length: " + boost::lexical_cast<string>(contentLength) + "\n"
"Content-Type: image/png;\n"
"Connection: close\n"
"\n";
return h;
}
string Server::readMap(const string &filename)
{
ifstream file (filename.c_str(), ios::in|ios::binary);
string reply;
char buf[512];
while (file.read(buf, sizeof(buf)).gcount() > 0)
reply.append(buf, file.gcount());
return reply;
}
void Server::run(const string &filename, int port)
{
string data = readMap(filename);
try
{
boost::asio::io_service io_service;
tcp::acceptor acceptor(io_service, tcp::endpoint(tcp::v4(), port));
for (;;)
{
tcp::socket socket(io_service);
acceptor.accept(socket);
boost::asio::write(socket, boost::asio::buffer(header(data.size())));
boost::asio::write(socket, boost::asio::buffer(data));
}
}
catch (std::exception& e)
{
cerr << "exception: " << e.what() << endl;
}
}
Каждый раз, когда происходит ошибка:
исключение: сброс соединения одноранговой
Я вижу часть изображения в своем браузере, а иногда изображение почти завершено, но оно никогда не работает без ошибки.
Если я использую Wget это выглядит как
wget http://localhost:8089
--2012-03-07 12:07:19-- http://localhost:8089/
Resolving localhost... 127.0.0.1
Connecting to localhost|127.0.0.1|:8089... connected.
HTTP request sent, awaiting response... 200 OK
Length: 760032 (742K) [image/png]
Saving to: `index.html'
62% [========================================================> ] 475,136 --.-K/s in 0.002s
2012-03-07 12:07:19 (287 MB/s) - Read error at byte 475136/760032 (Connection reset by peer). Retrying.
--2012-03-07 12:07:20-- (try: 2) http://localhost:8089/
Connecting to localhost|127.0.0.1|:8089... connected.
HTTP request sent, awaiting response... 200 OK
Length: 760032 (742K) [image/png]
Saving to: `index.html'
73% [==================================================================> ] 557,056 --.-K/s in 0.001s
... many failes and finally
--2012-03-07 12:09:01-- (try: 9) http://localhost:8089/
Connecting to localhost|127.0.0.1|:8089... connected.
HTTP request sent, awaiting response... 200 OK
Length: 760032 (742K) [image/png]
Saving to: `index.html'
100%[===========================================================================================>] 760,032 --.-K/s in 0.001s
Любые идеи, как это исправить?
Я отредактировал источники и вопрос. Ничего не помогло ( – spe
У меня нет абсолютно никакой идеи, что может вызвать это, но это _might_ имеет какое-то отношение к тому, чтобы не дожидаться запроса до начала ответа. Возможно, вы должны, по крайней мере, выполнить парсинг по протоколу HTTP, и ждать, пока вы не получите последовательность с двойной новой строкой. Кроме этого, я не вижу ничего очевидного, если не ошибаюсь, за исключением неправильного завершения строки (HTTP ожидает \ r \ n), но я сомневаюсь, что это причина вашего Проблема: я предполагаю, что файл не будет изменен во время передачи, конечно. – Rawler
Вы были на высоте!> Возможно, вы, по крайней мере, должны провести разбор строки в HTTP-протоколе и подождать, пока вы не получите двойной символ новой строки, Последовательность. – spe