所以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?
答案 0 :(得分:0)
先生。安徒生应该为此获得赞誉,但我不能将评论标记为答案,我想结束这个问题。
他死了。首先,客户端浏览器请求页面。服务器发送它。当客户端浏览器收到HTML文档时,它会向服务器发送HTML中指定的所有图像/文件的请求。
我正在检查来自客户的所有地址请求,使用conn-> uri。这使我可以简单地运行字符串比较来确定我从哪个页面接收数据。但是,除了我的页面之外,我没有检查任何其他字符串。
我一说简单:
std :: cout<< " REQUESTED:" << conn-> uri<<的std :: ENDL;
我看到请求清楚了一天(在我的情况下是/image.jpg)。所以我将前面提到的图像代码与回复函数中的另一个字符串比较放在一起,presto-magico,HTML中嵌入的图像,一起玩得很开心。
感谢您回答我的问题。
P.S。发送文件代码有点不同:
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);