热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

通过C中的http发送图像

因此,我用C语言制作了一个Web服务器,该服务器显示传感器温度以及gnuplot以png格

因此,我用C语言制作了一个Web服务器,该服务器显示传感器温度以及gnuplot以png格式绘制的图形。
我在发送http模板和png图像时遇到问题。我可以将所有数据发送到http模板,但最后不能附加图像。

static const char response_http_template[] = {
"HTTP/1.1 200 OK \
Date: Mon,27 Jul 2009 12:28:53 GMT \
Server: Apache/2.2.14 (Win32) \
Last-Modified: Wed,22 Jul 2009 19:15:56 GMT \
Content-Length: %lu \
Content-Type: text/html \
Connection: Closed \
\n\n \
%s \
%s"
};
static const char response_page_template[] = {
" \
\
\
\
\
\
more html code with some %s
}
void send_response_data(uint32_t sock_client,const char *student_name,last_temp_t *last_temp)
{
char write_buf[8192] = { 0 };
char out_buf[8192] = { 0 };
struct stat filestat;
char filesize[7];
int fd;
char file_buf[1024] = {0};
char result;
FILE *fp;
if ( ((fd = open ("./sup/data.png",O_RDONLY)) <-1) || (fstat(fd,&filestat) <0) ) {
printf ("Error in measuring the size of the file");
}
sprintf (filesize,"%zd",filestat.st_size);
printf("File size %s\n",filesize);
fp = fopen ("./sup/data.png","r");
if (fp == NULL)
{
perror("fopen error");
exit(EXIT_FAILURE);
}
fread(file_buf,sizeof(char),filestat.st_size + 1,fp);
fclose(fp);
sprintf(
write_buf,response_page_template,student_name,last_temp->timestamp,last_temp->temp);
sprintf(out_buf,response_http_template,strlen(write_buf) + strlen(file_buf),write_buf,file_buf);
write(sock_client,out_buf,strlen(out_buf));
}

当我使用chrome启动客户端时,我看到正确的http代码,但未显示图像,仅显示以下文本:``PNG

关于如何发送二进制数据的任何想法?或者,如果我需要更改http模板中的某些内容?

谢谢


这里有两种可能的路径:


  1. 检查请求URL,然后根据URL发送HTML页面或图像,或者

  2. 同时使用数据网址

对于选项1,“主”服务器将必须检查URL是否指向/ image /(或其他表示图像的文件夹)。

对于选项#2,使用数据URL(在Google上进行搜索,或查看:https://en.wikipedia.org/wiki/Data_URI_scheme

img src="data:image/png;base64,iVBORw0KGgoAAA
ANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4
//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU
5ErkJggg==" alt="Red dot" />

您将需要base64编码器才能将文件从二进制转换为文本。


推荐阅读
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文详细介绍了C语言的起源、发展及其标准化过程,涵盖了从早期的BCPL和B语言到现代C语言的演变,并探讨了其在操作系统和跨平台编程中的重要地位。 ... [详细]
  • GNU 发布的 glibc 是 Linux 系统中最基础的 C 运行库,提供了一系列底层 API,几乎所有其他运行库都依赖于它。本文详细介绍了 glibc 的主要功能和服务,并探讨了其在系统开发中的重要性。 ... [详细]
  • 本文介绍如何解决在 IIS 环境下 PHP 页面无法找到的问题。主要步骤包括配置 Internet 信息服务管理器中的 ISAPI 扩展和 Active Server Pages 设置,确保 PHP 脚本能够正常运行。 ... [详细]
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • 本文详细介绍如何使用arm-eabi-gdb调试Android平台上的C/C++程序。通过具体步骤和实用技巧,帮助开发者更高效地进行调试工作。 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 深入解析Spring Cloud Ribbon负载均衡机制
    本文详细介绍了Spring Cloud中的Ribbon组件如何实现服务调用的负载均衡。通过分析其工作原理、源码结构及配置方式,帮助读者理解Ribbon在分布式系统中的重要作用。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 本文探讨了高质量C/C++编程的最佳实践,并详细分析了常见的内存错误及其解决方案。通过深入理解内存管理和故障排除技巧,开发者可以编写更健壮的程序。 ... [详细]
  • 在Java中,this是一个引用当前对象的关键字。如何通过this获取并显示其所指向的对象的属性和方法?本文详细解释了this的用法及其背后的原理。 ... [详细]
  • 主板IO用W83627THG,用VC如何取得CPU温度,系统温度,CPU风扇转速,VBat的电压. ... [详细]
  • 本文介绍如何利用栈数据结构在C++中判断字符串中的括号是否匹配。通过顺序栈和链栈两种方式实现,并详细解释了算法的核心思想和具体实现步骤。 ... [详细]
author-avatar
夏山_Els乀i丷e
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有