1

所以 Mongoose.c 库非常简单。我已经能够使用他们的事件系统、URL 识别、多表单示例和他们的连接系统来构建一个简单的登录系统。我使用过 C++ minGW、mongoose.c&.h 和我的浏览器。现在我想实现图像。

但有一个基本问题我无法解决。我可以传输 html 文档或图像。单独的 jpg 文件和 html 文档一样会愉快地显示,只要其中一个是单独的。我的代码比较简单,对于html:

--pretend std::string HTMLAsString holds all html for the document.
 mg_send_data(conn,HTMLAsString,strlen(HTMLAsString));

当我想发送图像时,它非常相似:

while ((fread(buf, 1, sizeof(buf), fp)) > 0) {
        mg_send_data(conn,buf,n);
}
mg_send_data(conn,"\r\n",2);

这两项工作(我已经删除了不相关的部分,例如字符串的组成方式或缓冲区的填充方式,足以说明这些方面有效)。我可以有 HTML 格式,带有“缺少图像空间”,或者我可以显示图像,但没有 HTML。

如何同时发送图像和 HTML?

4

1 回答 1

0

Andersen 先生应该为此获得赞誉,但我无法将评论标记为答案,我想结束这个问题。

他死定了。首先,客户端浏览器请求页面。服务器发送它。当客户端浏览器收到 HTML 文档时,它会向服务器发送请求,以获取 HTML 中指定的所有图像/文件。

我正在使用 conn->uri 检查来自客户端的所有地址请求。这使我可以简单地运行字符串比较来确定我从哪个页面接收数据。但是,除了我有页面的字符串之外,我没有检查任何其他字符串。

只要我放一个简单的:

std::cout << "请求:" << conn->uri << std::endl;

我清楚地看到了请求(在我的情况下是/image.jpg)。所以我把前面提到的图像代码和回复函数中的另一个字符串比较放在一起,还有 presto-magico,嵌入在 HTML 中的图像,一起玩得很开心。

谢谢你回答我的问题。

PS 发送文件代码有点不同:

char buf[1024];
int n;
FILE *fp;
fp = fopen(cstrpath, "rb");
if(fp==NULL){printf("ERROR, NO %s found.",cstrpath);}
while ((n = fread(buf, 1, sizeof(buf), fp)) > 0) {
    mg_send_data(conn,buf,n);
}
fclose(fp);
mg_send_data(conn,"\r\n",2);
于 2014-08-24T21:21:30.370 回答