Die Daten werden nicht mit HTTP-Antwort in meinem HTTP-Server gesendet
Frage
Ich arbeite einen HTTP-Server für meine Klasse zu machen. Aber wird die zurückgegebene Datei nicht von Firefox angezeigt wird. Ich konstruiere in dem rechten content-length
der Datei, die ich senden will, dann schicke ich die Antwort-Header mit einem Aufruf eine Antwort-Header und setzte auf send()
. Als nächstes benutze ich send()
die Datei erneut zu senden, warum Firefox die Datei nicht angezeigt wird? Ich werde den entsprechenden Code unten schreiben.
Wie Sie mit dem Code sehen werden, ich habe Probleme eine error_response
senden, während ein 404-Fehler. Live-HTTP-Header mit Hilfe Ich kann sehen, dass Firefox den richtigen Antwort-Header empfängt, und die cout << error_response << endl;
die richtige Antwort kann nicht gedruckt werden. Warum Firefox nicht angezeigt werden? Muss ich nur einen Anruf den Header und das Antwortpaket send()
enthalten?
// send response headers
response->Print( buffer, 2000 );
if ( send( acc_tcp_sock, buffer, sizeof(buffer), 0 ) < 0 ) {
cerr << "Unable to send response headers to client." << endl;
return 5;
}
// if 200 and GET then send file
if ( response->Get_code() == 200 && method == "GET" ) {
// send file
}
// close file, if it has been opened
if ( response->Get_code() == 200 ) {
fclose( returned_file );
}
else if ( method == "GET" ) {
if ( send( acc_tcp_sock, error_response.c_str(), error_response.length(), 0 ) < 0 ) {
cerr << "Unable to send data to client." << endl;
return 6;
}
cout << error_response << endl;
}
close( acc_tcp_sock ); // close the connection
}
return 0;
}
Lösung
Haben Sie versucht, die Antwort-Header zu senden und die Datei im selben Sendebefehl? Gibt es eine Möglichkeit Sie können sagen, was firefox empfängt. Sie könnten Schreiben versuchen, einig HTTPRequester-Klasse, eine Konsolenanwendung, die eine HTTP-Anfrage an den Server sendet und sehen, was seine im Gegenzug zu bekommen.