В настоящее время я разрабатываю интерфейс html/javascript с бэкэнд C++, который выполняет все вычисления. Оба подключаются через интегрированный небольшой веб-сервер dlib, который обрабатывает все запросы. Эти запросы данных во внешнем интерфейсе, как это:Не удается подключиться к dlib webserver удаленно, localhost действительно работает
pop=$.ajax({ //load Population array of 90
type:"POST",
url: "Pop90",
async:false
});
eval(pop.responseText);
Веб-сервер возвращает то большой массив (длина около 4 000 000) в виде одной строки. Это работает отлично, если я подключаюсь через localhost, но я не могу получить доступ к серверу удаленно на другом компьютере. Браузер просто загружает время, а затем истекает время, но я вижу все запросы на сервере. Сервер выдает ошибку: dlib.server_http: http-поле из клиента слишком длинное. Но HTTP-запрос от клиента не должен быть большим, фактический пост с сервера. Thx много заранее! Чтобы разработать немного больше. Я просто протестировал страницу в firefox, которая не работает даже через localhost. Консоль ошибок ВОФК инициализатор массива, который является respinse строка веб-сервер, и он идет, как это, но с как 4 миллионов словарных статей:
"ar=[-99999, -99999, ...]"
класс веб-сервер, который обрабатывает запрос выглядит следующим образом:
class web_server : public server_http
{
vector<vector<double>> pop90;
vector<vector<double>> pop95;
vector<vector<double>> pop00;
public: web_server::web_server()
{
cout<<"init...";
loadArray("data/raw/afp90g.asc", &pop90);
cout<<" 90 loaded...";
loadArray("data/raw/afp95g.asc", &pop95);
cout<<" 95 loaded...";
loadArray("data/raw/afp00g.asc", &pop00);
cout<<" 00 loaded...";
cout<<"ready!"<<endl;
}
const std::string on_request (const incoming_things& incoming, outgoing_things& outgoing)
{
cout<<"---------------------------"<<endl;
cout<<incoming.path<<endl;
ostringstream sout;
sout<<get_file_contents("Seite.html");
cout<<"content type: "<<incoming.content_type<<endl;
cout<<"request type: "<<incoming.request_type<<endl;
string filename=incoming.path.substr(1,incoming.path.length());
if (incoming.path.substr(0,1) == "/" && incoming.path.length()>1)
{
if (incoming.path=="/css/Style.css") outgoing.headers["Content-Type"] == "text/css";
if (incoming.path.substr(0,8)=="/Pop90") return parseArray(pop90);
if (incoming.path.substr(0,8)=="/Pop95") return parseArray(pop95);
if (incoming.path.substr(0,8)=="/Pop00") return parseArray(pop00);
return get_file_contents(filename.c_str());
}
return sout.str();
}
};
Итак, я немного потрудился с файлом server_http.cpp, чтобы создать полный дамп входящего потока. Это швы, как будто есть случайные -1 значения (EOF) между прекрасно прекрасными сообщениями HTTP до тех пор, пока они подключаются локально. Если я подключаюсь удаленно с помощью моего фактического ip, вы получаете только -1 значений. Я дезактивировал свой брандмауэр/антивирус. Переадресация портов должна быть в порядке. Я до сих пор не знаю, что делать.
Thx для ответа. Несмотря на то, что я не думаю, что это часть реальной проблемы, поскольку ошибка возникает при подключении к локальному хосту, а страница работает нормально, мне удалось достоверно воспроизвести ее. Если Javascript загружает содержимое html в элемент div через: '$ ("# test"). Load ("content/config.html"); он работает напрямую, но вскоре примерно через 10 секунд возникает ошибка. Я отправлю свой код на C++ в исходный вопрос. – user2160180
Ваш код выглядит отлично. Я бы поставил оператор печати на сайт throw (dlib/server/server_http.cpp line 140) и напечатал строку длиной до 16KB и посмотрел, что это такое. –
Отличная идея!Я попробовал cout << буферную переменную, а также ее размер, оказалось, что она пуста. Ошибка вызывается из-за другого условия (in.peek() == EOF) – user2160180