此段代码的特点
<h1>Hello!</h1>
如何编译运行?
编译: gcc -o hello_server hello_server.c
运行: ./hello_server
请求: curl http://localhost:8888/any
源文件 hello_server.c
#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <string.h> #define PORT 8888 #define BUFFER_SIZE 4096 #define RESPONSE_HEADER "HTTP/1.1 200 OK\r\nConnection: close\r\nAccept-Ranges: bytes\r\nContent-Type: text/html\r\n\r\n" #define RESPONSE_BODY "<h1>Hello!</h1>" int handle(int conn){ int len = 0; char buffer[BUFFER_SIZE]; char *pos = buffer; bzero(buffer, BUFFER_SIZE); len = recv(conn, buffer, BUFFER_SIZE, 0); if (len <= 0 ) { printf ("recv error"); return -1; } else { printf("Debug request:\n--------------\n%s\n\n",buffer); } send(conn, RESPONSE_HEADER RESPONSE_BODY, sizeof(RESPONSE_HEADER RESPONSE_BODY), 0); close(conn);//关闭连接 } int main(int argc,char *argv[]){ int port = PORT; struct sockaddr_in client_sockaddr; struct sockaddr_in server_sockaddr; int listenfd = socket(AF_INET,SOCK_STREAM,0); int opt = 1; int conn; socklen_t length = sizeof(struct sockaddr_in); setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(int)); server_sockaddr.sin_family = AF_INET; server_sockaddr.sin_port = htons(port); server_sockaddr.sin_addr.s_addr = htonl(INADDR_ANY); if(bind(listenfd,(struct sockaddr *)&server_sockaddr,sizeof(server_sockaddr))==-1){ printf("bind error!\n"); return -1; } if(listen(listenfd, 10) < 0) { printf("listen failed!\n"); return -1; } while(1){ conn = accept(listenfd, (struct sockaddr*)&client_sockaddr, &length); if(conn < 0){ printf("connect error!\n"); continue; } if (handle(conn) < 0) { printf("connect error!\n"); close(conn); continue; } } return 0; }
后记
为什么要写这篇博文?
原因是,在使用公司里的自动化平台部署c++服务时,拿这个简单的示例来测试平台是否有问题。俗称趟一遍坑儿。
在网上也搜索了很多不少博文,发现里面的代码有几个问题,第一个问题就是编译不过,第二个问题则是有的代码应答必须要有文件,这对我的测试也造成了些许麻烦。
所以就自己参考别人的列子,在自己的博客里写一个简单的吧。以后再去趟别的自动化部署系统的坑的时候,顺手就能拿来用。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对小牛知识库的支持。
本文向大家介绍C++实现简单的HTTP服务器,包括了C++实现简单的HTTP服务器的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了C++实现HTTP服务器的相关代码,供大家参考,具体内容如下 以上就是本文的全部内容,希望对大家的学习有所帮助。
本文向大家介绍go语言实现一个最简单的http文件服务器实例,包括了go语言实现一个最简单的http文件服务器实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了go语言实现一个最简单的http文件服务器的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的Go语言程序设计有所帮助。
本文向大家介绍go语言实现简单http服务的方法,包括了go语言实现简单http服务的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了go语言实现简单http服务的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的Go语言程序设计有所帮助。
本文向大家介绍Go语言实现简单Web服务器的方法,包括了Go语言实现简单Web服务器的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Go语言实现简单Web服务器的方法。分享给大家供大家参考。具体分析如下: 包 http 通过任何实现了 http.Handler 的值来响应 HTTP 请求: package http type Handler interface { ServeHTTP
本文向大家介绍Go语言实现的一个简单Web服务器,包括了Go语言实现的一个简单Web服务器的使用技巧和注意事项,需要的朋友参考一下 Web是基于http协议的一个服务,Go语言里面提供了一个完善的net/http包,通过http包可以很方便的就搭建起来一个可以运行的Web服务。同时使用这个包能很简单地对Web的路由,静态文件,模版,cookie等数据进行设置和操作。 http包建立Web服务器 上
本文向大家介绍利用C语言实现简易版扫雷,包括了利用C语言实现简易版扫雷的使用技巧和注意事项,需要的朋友参考一下 我和我的父亲都是扫雷的狂热粉,小时候我常常因为技术不好而被父亲嘲笑,那么今天我要来做一个简易版扫雷,回头也给他玩一玩。 首先我们要构建好雷盘的样子,我们理所当然想到利用二维数组。那么请注意:因为我们每一次随机生成的雷盘不能展示给用户,所以显示盘与雷盘要分开,那么我们在这里要用到两个二维数