Domanda

Sto lavorando per creare un server HTTP per la mia classe. Tuttavia, il file restituito non viene visualizzato da Firefox. Costruisco un'intestazione di risposta e inserisco il content-length giusto del file che voglio inviare, quindi invio le intestazioni di risposta con una chiamata a send(). Quindi utilizzo nuovamente error_response per inviare il file, perché Firefox non visualizza il file? Pubblicheremo il codice pertinente di seguito.

Come vedrai con il codice, ho problemi a inviare un cout << error_response << endl;, durante un errore 404. Usando le intestazioni http live posso vedere che Firefox riceve l'intestazione della risposta corretta e che <=> stampa la risposta corretta. Perché Firefox non lo visualizza? Devo effettuare una sola chiamata a <=> contenente l'intestazione e il pacchetto di risposta?

// 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;
}
È stato utile?

Soluzione

Hai provato a inviare l'intestazione della risposta e il file con lo stesso comando di invio? C'è un modo per dire cosa sta ricevendo Firefox. Potresti provare a scrivere, usando qualche classe HTTPRequester, un'app console che invia una richiesta HTTP al tuo server e vedere cosa sta ottenendo in cambio.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top