HTTPサーバーのファイルタイプ(コンテンツタイプを使用)をチェックする関数を記述しました。しかし、私はこれをグローバル変数として持っていますが、HTTPとコンテンツタイプの行をブロックしました。ディレクトリから特定のファイルを要求した後、コンテンツタイプのHTTPサーバーに接続するにはどうすればよいですか?
char * request_str; //= "HTTP/1.0 200 OK\r\n"
//"Content-type: text/html; charset=UTF-8\r\n\r\n";
HTML、PNG、TXT、等これは、引数としてファイル名、ファイルタイプ、およびrequest_strを有するもののようなファイルの種類をチェック機能。私は、ファイル名/ファイルタイプを読んだ後にrequest_strが返ることを期待していますが、動作しないと思います。
void get_filetype(char *filename, char *filetype, char *request_str)
{
if(strstr(filename, ".html"))
{
strcpy(filetype, "text/html");
request_str = "HTTP/1.0 200 OK\r\n"
"Content-type: text/html; charset=UTF-8\r\n\r\n";
return request_str;
}
else if(strstr(filename, ".gif"))
{
strcpy(filetype, "image/gif");
request_str = "HTTP/1.0 200 OK\r\n"
"Content-type: image/gif; charset=UTF-8\r\n\r\n";
return request_str;
}
else if(strstr(filename, ".png"))
{
strcpy(filetype, "image/png");
request_str = "HTTP/1.0 200 OK\r\n"
"Content-type: image/png; charset=UTF-8\r\n\r\n";
return request_str;
}
else if(strstr(filename, ".jpg"))
{
strcpy(filetype, "image/jpg");
request_str = "HTTP/1.0 200 OK\r\n"
"Content-type: image/jpg; charset=UTF-8\r\n\r\n";
return request_str;
}
else
{
strcpy(filetype, "text/plain");
request_str = "HTTP/1.0 200 OK\r\n"
"Content-type: text/plain; charset=UTF-8\r\n\r\n";
return request_str;
}
}
サーバに接続しようとすると、この機能がサーバリクエスト機能にあります。私が近づいている問題は、ブラウザーでテストするとWebサーバーに接続しないため、何も表示されないということです。サーバーに接続しようとする前にファイルの種類を確認する必要がありますか?皆さん、事前にありがとうございます。
while(1){
file_offset += recv(client_fd,&client_buf[file_offset],4096,0);
if(strstr(client_buf,"\r\n\r\n"))
break;
}
requested_file = parseRequest(client_buf);
if(stat(filename, &for_filename) < 0)
{
clienterror(client_fd, filename, "404", "Not found", "Webserver couldn't find this file");
return;
}
get_filetype(filename, file_type, request_str);
send(client_fd,request_str,strlen(request_str),0);
// take requested_file, add a . to beginning, open that file
filename[0] = '.';
strncpy(&filename[1],requested_file,4095);
read_fd = open(filename,0,0);