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协议连接访问服务器端,我们看到网页就相当于服务器端将本地的网页文件发送到你的电脑,你的电脑浏览器作为客户端将网页显示出来!
在浏览器运行结果如图所示
- Linux下简易web服务器实现
- 简易Web服务器实现
- 简易Web服务器实现
- Linux C++ 实现简易小型的Web服务器httpd
- Linux C++ 实现简易小型的Web服务器httpd
- 【Socket编程】Python实现简易Web服务器
- linux c 实现简易HTTP服务器
- python:使用web.py实现最简易的web服务器
- LINUX-LINUX下简易彩色进度条实现
- Linux虚拟机下建立FTP服务器实现与host主机互传文件 - 简易版
- linux下安装svn以及实现同步web服务器~~
- 简易Web服务器
- 简易Web服务器
- 简易web服务器
- 简易web服务器
- 手写简易WEB服务器
- 简易Web服务器
- python实现简易web多进程静态服务器
- QT中关闭子窗口而不关闭父窗口
- Visual Studio 2010 单元测试之一---普通单元测试
- 树状模型存储格式
- Android Framework移植----长按返回键结束程序
- iOS线程之——NSCondition
- Linux下简易web服务器实现
- 常用js事件
- jquery JSON的解析方式
- java基础———第十二天
- POJ 3771 World Islands
- 2013西安交大ACM热身赛D题
- WPF
- 笔记本电脑如何创建手机电脑都可用的Wifi无线网络连接
- ASIHTTP+JSONKit 简单例子