Linux 环境 HTTP 服务器
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <netinet/in.h> #include <sys/socket.h> #define BUF_LEN 1028 // 1028 ever #define PORT 8000 const static char html_re_hd_su[] = "HTTP/1.1 200 OK\r\nContent-type: text/html\r\n\r\n"; //html response header : success int CreatTcpSocket_fd(){ int socket_fd; struct sockaddr_in address; socket_fd = socket(AF_INET, SOCK_STREAM, 0); //tcp protocal //catch up exception if(socket_fd < 0){ printf("socket creation failed\n"); exit(1); // 1 means exit with exception return 1; } //step 2: bind the socket file description memset(&address, 0, sizeof(address)); address.sin_family = AF_INET; //Internet protocal address.sin_port = htons(PORT); address.sin_addr.s_addr = INADDR_ANY; //set the host ip if(bind(socket_fd, (struct sockaddr*)&address, sizeof(struct sockaddr_in))){ //catch up exception printf("socket binding failed!\n"); exit(1); return 1; } return socket_fd; } void AnalyseTcpRequest(const int socket_fd){ char requestMessage[BUF_LEN]; read(socket_fd, requestMessage, BUF_LEN); printf("%s\n", requestMessage); } void ReplyTcpRequest(int socket_fd){ char replyMessage[]= "<html><head><title>Welcome!</title></head>" "<body><h1>Welcome to Feng YuBo HTTP server demo!</h1>" "<p>This is a just small test page.</p></body></html>"; write(socket_fd, html_re_hd_su, strlen(html_re_hd_su)); write(socket_fd, replyMessage, strlen(replyMessage)); printf("replyed...\n"); } int main(){ int socket_fd = CreatTcpSocket_fd(); listen(socket_fd, 5); //max conection number is 5 now. //step 3: begin to accept tcp request struct sockaddr_in their_address; int their_sin_len = sizeof(struct sockaddr_in); for ( ; ; ) { printf("begin to accept tcp request...\n"); //begin to block the processing int newSocket_fd = accept(socket_fd, (struct sockaddr*)&their_address, &their_sin_len); printf("analysing...\n"); AnalyseTcpRequest(newSocket_fd); ReplyTcpRequest(newSocket_fd); close(newSocket_fd); } exit(0); return 0; }
目标: 1.接收HTTP请求 2.打印HTTP请求报文 3.返回HTTP响应报文 4.返回预设好的网页
智慧在街市上呼喊,在宽阔处发声。