最简单的http服务器实现
现在有很多功能强大的http服务器,APACHE,IIS我们应该都很熟悉
其实众多的http服务器都有个最基本的工作流程:
1.初始化工作环境,在固定端口(80)侦听外部请求
2.接收请求
3.建立连接
4.发送响应头部
5.发送响应内容
6.中断连接
下面是个最简单的http服务器的例子,用winsock实现
为什么是最简单的呢,因为它接收到请求后,发送的响应头部和响应内容都是直接指定的
不能区别不同的get,post,head 请求。
#include "winsock.h"
#include "stdlib.h"
#include "stdio.h"
#include "string.h"
#pragma comment (lib,"wsock32")///所需的库文件
void main()
{
/初始化winsock环境
WSADATA wsadata;
WORD wVersion=MAKEWORD(2,0);/winsock 2.0
if(WSAStartup(wVersion,&wsadata)!=0)
{
printf("initalize failed!\n");
WSACleanup();
exit(1);
}
int sock,csock,length;//sock是服务器端侦听套接字,csock是客户端连接套接字
length=sizeof(struct sockaddr);
struct sockaddr_in server_ipaddr,client_ipaddr;//用来获得服务器和客户端的地址信息
memset(&server_ipaddr,0,length);
server_ipaddr.sin_family=AF_INET;
server_ipaddr.sin_port=htons(80);
server_ipaddr.sin_addr.s_addr=inet_addr("211.81.55.200");
char buff[4096];int nbuff;
sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
///绑定
if(bind(sock,(struct sockaddr *)&server_ipaddr,length)==SOCKET_ERROR)
{
printf("Bind error\n");
WSACleanup();
exit(1);
}
侦听
if(listen(sock,5)==SOCKET_ERROR)
{
printf("Listen error\n");
WSACleanup();
exit(1);
}
/
char headers[1000];//保存头部
/头部格式
char hdrFmt[]=
"HTTP/1.0 200 OK\r\n"
"Server: MySocket Server\r\n"
"Date: %s\r\n"
"Content-Type: text/html\r\n"
"Accept-Ranges: bytes\r\n"
"Content-Length: %d\r\n\r\n";
char * strGmtNow="08/15/14 22:53:00 GMT";///随便指定了一个时间
wsprintf(headers, hdrFmt, (const char*) strGmtNow, strlen(CustomHtml));
//要传送的网页内容
char CustomHtml[]=
"<html>\r\n"
"<head>\r\n"
"<title></title>\r\n"
"</head>\r\n"
"<body>\r\n"
"<p align=\"center\">欢迎访问我的主页</p>\r\n"
"<h3 align=\"center\"><a href=\"Default.htm\">快乐天地</a></h3>\r\n"
"<p>结束</p>\r\n"
"<p> </p>\r\n"
"</body></html>\r\n\r\n";
//
while(1)
{
//侦听到连接后,产生新的套接字
///用来和客户端传递消息
csock=accept(sock,(struct sockaddr *)&client_ipaddr,&length);
if(csock==SOCKET_ERROR)
{
printf("Listen error\n");
WSACleanup();
exit(1);
}
nbuff=recv(csock,buff,4095,0);
buff[nbuff]='\0';
printf("%s",buff);
/发送响应头部
send(csock,headers,strlen(headers),0);
/发送内容
send(csock,CustomHtml,strlen(CustomHtml),0);
/关闭本次连接
closesocket(csock);
}
}
转载于:https://www.cnblogs.com/MaxWoods/archive/2010/02/02/1661445.html
最简单的http服务器实现相关推荐
- Linux网络管理之四:创建一个简单的vsftpd服务器
VSFTPD主要配置文件如下:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" ...
- 用Python建立最简单的web服务器
用Python建立最简单的web服务器 利用Python自带的包可以建立简单的web服务器.在DOS里cd到准备做服务器根目录的路径下,输入命令: python -m Web服务器模块 [端口号,默认 ...
- Linux下简单的邮件服务器搭建
Linux下简单的邮件服务器搭建 电子邮件服务简介 电子邮件是因特网上最为流行的应用之一,而邮件服务器是一种用来负责电子邮件收发管理的设备,它构成了电子邮件系统的核心. 电子邮件系统的组成 MUA( ...
- ipad php mysql_如何用PHP/MySQL为 iOS App 写一个简单的web服务器(译) PART1
原文:http://www.raywenderlich.com/2941/how-to-write-a-simple-phpmysql-web-service-for-an-ios-app 作为一个i ...
- 使用node.js作为简单的Web服务器
我想运行一个非常简单的HTTP服务器. 对example.com每个GET请求都应该将index.html提供给它,但是作为常规HTML页面(即,与阅读普通网页时相同的体验). 使用下面的代码,我可以 ...
- python16进制字节序_第 1 章 套接字、IPv4和简单的客户端/服务器编程
第 1 章 套接字.IPv4和简单的客户端/服务器编程 本章攻略: 打印设备名和IPv4地址 获取远程设备的IP地址 将IPv4地址转换成不同的格式 通过指定的端口和协议找到服务名 主机字节序和网络字 ...
- 基于 Java NIO 实现简单的 HTTP 服务器
1.简介 本文是上一篇文章实践篇,在上一篇文章中,我分析了选择器 Selector 的原理.本篇文章,我们来说说 Selector 的应用,如标题所示,这里我基于 Java NIO 实现了一个简单的 ...
- 基于epoll实现简单的web服务器
1. 简介 epoll 是 Linux 平台下特有的一种 I/O 复用模型实现,于 2002 年在 Linux kernel 2.5.44 中被引入.在 epoll 之前,Unix/Linux 平台下 ...
- 在Linux上搭建 一个简单的vsftpd服务器
主要配置文件如下: /etc/vsftpd/vsftpd.conf 主配置文件 /etc/vsftpd.ftpusers 阻止用户访问FTP服务器的用户名称清单 /etc/vsftpd.userlis ...
最新文章
- 201671010128 2017-09-17《Java程序设计》之步步深入面向对象
- python拿什么做可视化界面好-手把手教你用Python做个可视化的“剪刀石头布”小游戏...
- pci规划的三个原则_NR PCI规划
- android的动态注册,Android应用开发之BroadcastReceiver(广播)的静态注册和动态注册 --Android开发...
- python 如何暂停程序?程序阻塞 (input()、time.sleep()、os.s*stem(“pause))
- 读《高性能网站建设指南》有感
- DAY 34 进程通信、消费者模型和线程
- 让你提前认识软件开发(15):程序调试的利器—日志
- SQL Server字符串处理函数大全
- 乐学计算机,乐学高考电脑版
- 正则匹配图片地址 php,php正则匹配图片地址
- css宋体代码_family【CSS 字体】(宋体 黑体 微软雅黑)CSS文字字体
- 慕课软件工程(第二十章.ISO9000标准)
- 小程序常用ui库 组件库
- 运输小猫(斜率优化)
- Android手机安装原版BT5[ARM]
- 史上首例!阿里程序员写的这一行代码,被国家博物馆收藏了
- CMD设置代理 注册表设置IE代理
- 工作 3 年后的一些思考
- 性能测评:腾讯云轻量服务器4核8G12M带宽流量CPU主频型号