0

私は現在、すべての計算を行う C++ バックエンドを備えた html/javascript フロントエンドを開発しています。どちらも、すべてのリクエストを処理する統合された小さな dlib Web サーバーを介して接続されています。フロントエンドは次のようなデータをリクエストします。

pop=$.ajax({ //load Population array of 90
        type:"POST",
        url: "Pop90",
        async:false
        });
    eval(pop.responseText);

Web サーバーは、1 つの文字列で大きな配列 (長さ約 4 000 000) を返します。これは、ローカルホスト経由で接続すると完全に機能しますが、別のコンピューターでサーバーにリモートでアクセスできません。ブラウザはしばらくロードしてからタイムアウトしますが、サーバー上のすべてのリクエストを確認できます。サーバーがエラーをスローします: dlib.server_http: クライアントからの http フィールドが長すぎます。しかし、クライアントからの http 要求はそれほど大きくないはずです。サーバーからの実際の投稿はそれほど大きくありません。かなり前にThx!もう少し詳しく説明します。Firefox でページをテストしましたが、localhost 経由でも機能しません。エラー コンソールは配列初期化子を表示します。これは Web サーバーの応答文字列であり、次のようになりますが、400 万のエントリがあります。

"ar=[-99999, -99999, ...]" 

リクエストを処理する Web サーバー クラスは次のようになります。

    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 ファイルを少しいじって、着信ストリームの完全なダンプを作成しました。ローカルに接続されている限り、完全に正常な http メッセージ間に -1 の値 (EOF) がランダムに存在するかのように継ぎ目があります。実際の IP 経由でリモート接続すると、-1 の値しか入力されません。ファイアウォール/アンチウイルスを無効にしました。ポート転送は問題ないはずです。私はまだ何をすべきかわからない。

4

2 に答える 2

0

わかりました、それで私はそれを理解したと思います。私のルーターには、NAT ループバックと呼ばれる機能がないようです。したがって、私の Web サーバーはリモートで動作しますが、LAN ネットワーク内からアクセスできないだけです。

ソースはドイツ語です: http://forum.telekom.de/foren/read/service/dsl-festnetz/speedports/speedport-700er-serie/w723v-typ-b-portweiterleitung-funktioniert-nicht-mehr,510,8862346 ,page=2.html

于 2013-09-12T07:17:02.000 に答える