c语言编写http服务器

c语言编写http服务器一直想弄一下 http 服务器 一直没有深入的去看 http 协议 昨天研究了一天 查看源码和优化 终于实现了 也稍微的理解了一下 http 协议 身为一个嵌入式工程师 需要了解 http 协议吗 显然是必要的 例如 你有一个网络设备 必要需要设置和获取一些参数 你可以使用如串口之类的通讯总线 不过实现起来并不简单 需要实现上位机和下位机程序 协议还得自己编写和解析 如果上位机要有界面的话 还得做

一直想弄一下http服务器,一直没有深入的去看http协议。

昨天研究了一天,查看源码和优化,终于实现了。也稍微的理解了一下http协议。

身为一个嵌入式工程师,需要了解http协议吗?显然是必要的,

例如:你有一个网络设备,必要需要设置和获取一些参数,你可以使用如串口之类的通讯总线,不过实现起来并不简单,

需要实现上位机和下位机程序,协议还得自己编写和解析,如果上位机要有界面的话,还得做界面,确实挺麻烦的。

既然是网络设备,比如是rj45,wifi,里面一般都带有tcp/ip协议,用它来实现一个http服务器,那么上位机就可以直接使用

浏览器作为媒介了。

用浏览器作为控制媒介,那就需要了解http协议了。下面简单的用c语言实现一个httm服务器,用浏览器访问。

基本原理:

       1.http服务器其实就是一个socket的服务器程序

       2.浏览器其实就是一个socket的客服端程序

       3.它们按照http协议进行传输

我们可以用网络调试助手验证:

        1.用网络助手创建一个192.168.0.105  :8888的TCP服务器

        2.用浏览器访问服务器http://192.168.0.105:8888

        3.ip根据自己电脑的网段设置

可以看到调试助手接收到如下数据(可以确定浏览器访问服务器时发送的是这些内容):

c语言编写http服务器

比较有用的是第一行的内容:

GET /index.html HTTP/1.1

     这里给了一些有用的信息,可以看出用的是get请求,后面是要访问的页面。因为是例子我把这个写成index.html

如果是嵌入式的页面可能是LED.html,SET.html等等

     由这个信息,可以知道浏览器要访问index.html页面,我们在程序中需要把这个内容解析出来,然后打开对应的

html文件,这里有人会问html是文件,嵌入式设备没有文件系统怎么办?那么其实是可以用数组把页面保存起来的,

只需要发送数组即可。

首先给浏览器发送http协议头:

后面发送html文件内容就ok了,浏览器就可以显示你发送过去的页面了。

主函数源码:

while(1) { //客服端连接,这里会无限等待 acpt_soc=accept(srv_soc,(struct sockaddr*)&client_addr,&client_len); printf("[http-Web] client IP:[%s], port:[%d]\n",inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port)); //接收服务器发送过来的http报文,这里会无限等待 recv_len=recv(acpt_soc,recv_buf,1024,0); recv_buf[recv_len]=0; printf("浏览器发送:\n"); printf("%s",recv_buf); /* 向客户端发送响应数据 */ http_send_response(acpt_soc, recv_buf, recv_len); closesocket(acpt_soc); }

程序流程:

        1.等待连接客服端

        2.接收客服端数据

        3.解析http数据

        4.发送http头+html文件

        5.关闭客服端

整个执行就是如此不停的循环。浏览器可以不断的访问这个服务器。

浏览器访问:http://127.0.0.1/index.html

c语言编写http服务器

源码:https://download.csdn.net/download/hes_c/

工程是Windows下用VS写的,用linux写其实更简单。

下面会使用get和post命令交换数据,达到与硬件设备通讯的目的。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/221654.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午5:35
下一篇 2026年3月17日 下午5:35


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号