如何使用libMongoose/Embedded Mongoose发送HTML和图像

How Does One Send BOTH HTML and Images Using libMongoose/Embedded Mongoose?

本文关键字:发送 HTML 图像 Mongoose Embedded 何使用 libMongoose      更新时间:2023-10-16

所以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,"rn",2);

这两个都可以工作(我已经剪掉了不相关的部分,比如字符串是如何组成的,或者缓冲区是如何填充的,足以说明这些方面的工作)。我可以有HTML格式,有一个'缺失的图像空间',或者我可以有一个图像显示,但没有HTML。

如何同时发送图像和HTML?

安徒生应该为此得到赞扬,但我不能把评论标记为答案,我想结束这个问题。

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

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

只要我放一个简单的:

std:: cout & lt; & lt;要求:"& lt; & lt;康涅狄格州-> uri & lt; & lt;std:: endl;

我清楚地看到了请求(在我的情况下/image.jpg)。因此,我将前面提到的图像代码与reply函数中的另一个字符串比较放在一起,然后魔术般地,嵌入HTML中的图像一起玩得很好。

谢谢你回答我的问题。

注:发送文件代码有一点不同:

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,"rn",2);