Linux下简易web服务器实现

来源:互联网 发布:域名备案注销原因 编辑:程序博客网 时间:2024/06/13 02:30

今天突然对http的web服务器感兴趣了,就研究了一下,发现linux下的web服务器就是一个socket编程的服务器端,而我们用的ie,chrome等浏览器就是客户端,只不过发送和接收数据按照http网页格式,就相当于对数据进行了封装,相当于加上了文件头和文件尾等一些规定的东西罢了。下面有一个简单的web服务器程序,网上找的,用了,感觉不错,分享一下。

当今很多http协议的服务器已经成熟化比如apache iis nginx 想想这些运行在服务器上的程序,利用tcp原理进行http协议的页面元素传输,这里有个简易原理程序。

#include <stdio.h>#include <sys/socket.h>#include <sys/types.h>#include <netinet/in.h>#include <string.h> main(){    int sk1,sk2;    int len = 0;    char buff[4096];    struct sockaddr_in cli_addr;    char msgret[4096];    memset( msgret, 0x00, sizeof(msgret) );     if( (sk1=socket(AF_INET, SOCK_STREAM, 0)) < 0 )    printf( "socket failed\n" );    printf( "creat socket success: %d\n", sk1 );     struct sockaddr_in sa;    memset( &sa, 0x00, sizeof(sa) );    sa.sin_family = AF_INET;    sa.sin_addr.s_addr = inet_addr( "192.168.0.111" );//服务器的ip地址,这里必须和你的电脑的相同    sa.sin_port = htons( 13800 );//端口号    if( bind(sk1, (struct sockaddr*)&sa, sizeof(sa)) < 0 )    printf( "bind socket failed\n" );     listen( sk1, 100 );     while( 1 )    {        len = sizeof(cli_addr);        sk2 = accept( sk1, (struct sockaddr*)&sa, (socklen_t*)&len );        if( sk2 < 0 )            printf( "create accept socket failed\n" );        else        {            printf( "accept socket: %d\n", sk2 );            memset( buff, 0x00, sizeof(buff) );            len = read( sk2, buff, 4096);            printf( "msg recv: %s\n", buff );            sprintf( msgret, "HTTP/1.1 200 OK\n"                             "Date: Fri, 02 Mar 2012 01:59:03 GMT\n"                             "Server: Apache"                             "Location: http://www.sina.com.cn/\n"                             "Cache-Control: max-age=60\n"                             "Expires: Fri, 02 Mar 2012 02:00:03 GMT\n"                             "Vary: Accept-Encoding\n"                             "Content-Length: 231\n"                             "Content-Type: text/html; charset=iso-8859-1\n"                             "X-Cache: MISS from xd33-82.HP08040021.sina.com.cn\n"                             "Connection: close\n\n"                             "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\n"                             "<html><head>\n"                             "<title>title test</title>\n"                             "</head><body>\n"                             "<h1>test body</h1>\n"                             "<p>Hello,I am web server!</p>\n"//打印的文字内容                             "</body></html>" );            len = send( sk2, msgret, sizeof(msgret), 0 );            if( len <= 0 )            {                printf( "send failed\n" );            }        }    }}
访问web服务器就相当于用客户端即浏览器采用http协议连接访问服务器端,我们看到网页就相当于服务器端将本地的网页文件发送到你的电脑,你的电脑浏览器作为客户端将网页显示出来!

在浏览器运行结果如图所示


原创粉丝点击