zoukankan      html  css  js  c++  java
  • http简单demo

        工作中开发的都是基于B/S(浏览器/服务器)架构项目,很多大牛都在考虑如何设计出高并发的服务器,比如NginxApache,最近在学习这方面底层知识,写一个简单demo

     

     1 #include <sys/types.h>
     2 #include <stdlib.h>
     3 #include <stdio.h>
     4 #include <sys/un.h>
     5 #include <sys/socket.h>
     6 #include <string.h>
     7 #include <unistd.h>
     8 #include <arpa/inet.h>
     9 
    10 int main(){
    11   int server_fd,client_fd;
    12     struct sockaddr_in myaddr;
    13     struct sockaddr_in clientaddr;
    14   int client_len = sizeof(clientaddr);
    15   
    16   //初始化通信地址信息
    17     myaddr.sin_family = AF_INET;
    18     myaddr.sin_addr.s_addr = htonl(INADDR_ANY);
    19     myaddr.sin_port = htons(80);
    20     
    21   //建立一个socket连接
    22     server_fd = socket(AF_INET,SOCK_STREAM,0);
    23     if(server_fd == -1){
    24         perror("socket error ");
    25   }
    26   //将地址与socket接口捆绑
    27     if(bind(server_fd,(struct sockaddr*)&myaddr,sizeof(myaddr)) == -1){
    28         perror("bind error");
    29   }
    30   //创建套接口并监听申请(20个连接)的连接
    31     if(listen(server_fd,20) == -1){
    32         perror("listen error");
    33     }
    34     
    35   //发送给客户端的数据
    36   char content[] = "<html><h1>hello sundy</h1></html>";
    37   
    38   
    39   //循环处理客户端请求
    40   while(1){
    41      //接受一个客户端请求
    42         client_fd=accept(server_fd,(struct sockaddr *)&clientaddr,&client_len);
    43         if(client_fd == -1){
    44             perror("accept error");
    45         }
    46         printf("accept\n");
    47     //发送数据到客户端
    48         send(client_fd,content,sizeof(content),1);
    49     //主动关闭客户端连接
    50         close(client_fd);
    51   }
    52    //关闭套结字连接
    53     close(server_fd);
    54     printf("hello world!");
    55     return 0;
    56 }

    一个简单的http服务器,仅仅是学习使用,如果在商业项目中,自己写一个或者基于开源项目修改需要考虑更多(可以参考tengine),比如

    1、初始化连接信息,并且创建连接和管理连接;

    2、如何解析客户端发过来的数据;

    3、如果提供高并发(比如Ngnix的多进程、非堵塞IO、底层数据接口、长连接或者短连接、多个客户请求分发)

    4、如果发送数据到客服端;

    5、如果处理错误信息并记录详细的日志;

     

    运行环境:Ubuntu 10.04 LTS+VMware8.0.4

  • 相关阅读:
    glade2支持C++代码的输出(1)
    通用的信号量捕获打印调用栈接口
    xbmc的静态链接办法
    SVG图片资源较多的一个WIKI网站
    批量图片大小调整
    每日算法
    每日算法
    每日算法
    每日算法
    每日算法
  • 原文地址:https://www.cnblogs.com/sunysen/p/2965554.html
Copyright © 2011-2022 走看看