0

我正在尝试使用 Visual Studio 2008 在 C++ 中编写客户端/服务器程序。到目前为止,项目运行执行以下操作:

在 cmd 提示符下运行 webserver - webserver 8080 打开 web 浏览器 - localhost 8080 打开本地 html 文件 - localhost:8080/demo.html

但是现在......假设客户端请求一个 gif 文件,那么服务器应该发送 gif 文件。客户端请求 txt 文件,那么服务器应该发送 .txt 文件。同样适用于 .html 和 .xbm 文件。

我不知道该怎么做。非常感谢任何帮助。

4

2 回答 2

0

在 UNIX 系统上,您将使用该file命令:它使用一组已知的“幻数”,用于识别不同的文件类型。和一些启发式方法来解决剩余的文件。大多数文件格式都嵌入了某种标识符,通常在前几个字节中。尤其是文本文件通常没有幻数,而是只使用可打印的字符(由于 UTF8 和 UTF16 很流行,对文本文件进行分类变得有点困难)。

确定文件类型后,您只需设置相应的 HTTP 标头即可。

于 2013-10-26T23:15:56.997 回答
0

好吧,因为我们在同一个班,我会给你一个线索:)

在标题部分,放置一些 if-else,如下所示:

if(strcmp(type,"html")==0){
  (void) sprintf(buff,"Content-Type:text/html\r\n");
  (void) send(conn,buff,strlen(buff),0);
}

else if(strcmp(type,"gif")==0){
  (void) sprintf(buff,"Content-Type:image/gif\r\n");
  (void) send(conn,buff,strlen(buff),0);
}

知道了?顺便说一句,您需要获取扩展名(使用endsWith函数检查路径),将扩展名与文件类型进行比较,然后给出正确的标题。用 gif 文件进行测试 :) 我已经可以使用了 :) 现在要提交。记得给我投票 :)

于 2013-10-31T01:31:55.453 回答