0

我正在为我的班级制作一个 HTTP 服务器。但是,Firefox 不显示返回的文件。我构造了一个响应头并将其放在content-length我要发送的文件的右侧,然后我通过调用来发送响应头send()。接下来我send()再次使用发送文件,为什么Firefox不显示文件?我将在下面发布相关代码。

error_response正如您将在代码中看到的那样,在 404 错误期间,我无法发送, 。使用实时 http 标头,我可以看到 Firefox 接收到正确的响应标头,并且cout << error_response << endl;确实打印了正确的响应。为什么 Firefox 不显示它?我是否只需要调用一次来send()包含标头和响应数据包?

// 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;
}
4

1 回答 1

0

您是否尝试过在同一个发送命令中发送响应标头和文件?有没有办法告诉你 Firefox 正在接收什么。您可以尝试使用一些 HTTPRequester 类编写一个控制台应用程序,该应用程序将 HTTP 请求发送到您的服务器并查看它的回报。

于 2009-11-26T19:30:03.257 回答