zoukankan      html  css  js  c++  java
  • 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
    Content-type: text/html
    
    "; //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
    ");
    		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!
    ");
    		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
    ", 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...
    ");
    }
    
    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...
    ");
    		//begin to block the processing
    		int newSocket_fd = accept(socket_fd, (struct sockaddr*)&their_address, &their_sin_len);
    		printf("analysing...
    ");
    		AnalyseTcpRequest(newSocket_fd);
    		ReplyTcpRequest(newSocket_fd);
    		close(newSocket_fd);
    	}
    
    	exit(0);
    	return 0;
    }
    

     目标: 1.接收HTTP请求  2.打印HTTP请求报文  3.返回HTTP响应报文  4.返回预设好的网页

  • 相关阅读:
    Dynamics CRM 2011/2013 通过Javascript给lookup字段赋值
    shell重定向(大于号,小于号,左右,2>&1,&)
    Dynamics CRM2011 同一个FORM表单同一个字段可以摆放多次
    词的向量表示
    机器翻译领域的新突破
    Dynamics CRM2011 隐藏sub-grid 新建项和添加现有项按钮
    sed常用方法与命令
    Dynamics CRM Odata QueryUrl中的SetName问题
    hive发杂数据结构的使用,struct,array,map
    maven 经常使用命令
  • 原文地址:https://www.cnblogs.com/fengyubo/p/5596332.html
Copyright © 2011-2022 走看看