现在有很多功能强大的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服务器实现相关推荐

  1. Linux网络管理之四:创建一个简单的vsftpd服务器

    VSFTPD主要配置文件如下:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" ...

  2. 用Python建立最简单的web服务器

    用Python建立最简单的web服务器 利用Python自带的包可以建立简单的web服务器.在DOS里cd到准备做服务器根目录的路径下,输入命令: python -m Web服务器模块 [端口号,默认 ...

  3. Linux下简单的邮件服务器搭建

    Linux下简单的邮件服务器搭建 电子邮件服务简介 电子邮件是因特网上最为流行的应用之一,而邮件服务器是一种用来负责电子邮件收发管理的设备,它构成了电子邮件系统的核心. 电子邮件系统的组成  MUA( ...

  4. 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 ...

  5. 使用node.js作为简单的Web服务器

    我想运行一个非常简单的HTTP服务器. 对example.com每个GET请求都应该将index.html提供给它,但是作为常规HTML页面(即,与阅读普通网页时相同的体验). 使用下面的代码,我可以 ...

  6. python16进制字节序_第 1 章 套接字、IPv4和简单的客户端/服务器编程

    第 1 章 套接字.IPv4和简单的客户端/服务器编程 本章攻略: 打印设备名和IPv4地址 获取远程设备的IP地址 将IPv4地址转换成不同的格式 通过指定的端口和协议找到服务名 主机字节序和网络字 ...

  7. 基于 Java NIO 实现简单的 HTTP 服务器

    1.简介 本文是上一篇文章实践篇,在上一篇文章中,我分析了选择器 Selector 的原理.本篇文章,我们来说说 Selector 的应用,如标题所示,这里我基于 Java NIO 实现了一个简单的 ...

  8. 基于epoll实现简单的web服务器

    1. 简介 epoll 是 Linux 平台下特有的一种 I/O 复用模型实现,于 2002 年在 Linux kernel 2.5.44 中被引入.在 epoll 之前,Unix/Linux 平台下 ...

  9. 在Linux上搭建 一个简单的vsftpd服务器

    主要配置文件如下: /etc/vsftpd/vsftpd.conf 主配置文件 /etc/vsftpd.ftpusers 阻止用户访问FTP服务器的用户名称清单 /etc/vsftpd.userlis ...

最新文章

  1. 201671010128 2017-09-17《Java程序设计》之步步深入面向对象
  2. python拿什么做可视化界面好-手把手教你用Python做个可视化的“剪刀石头布”小游戏...
  3. pci规划的三个原则_NR PCI规划
  4. android的动态注册,Android应用开发之BroadcastReceiver(广播)的静态注册和动态注册 --Android开发...
  5. python 如何暂停程序?程序阻塞 (input()、time.sleep()、os.s*stem(“pause))
  6. 读《高性能网站建设指南》有感
  7. DAY 34 进程通信、消费者模型和线程
  8. 让你提前认识软件开发(15):程序调试的利器—日志
  9. SQL Server字符串处理函数大全
  10. 乐学计算机,乐学高考电脑版
  11. 正则匹配图片地址 php,php正则匹配图片地址
  12. css宋体代码_family【CSS 字体】(宋体 黑体 微软雅黑)CSS文字字体
  13. 慕课软件工程(第二十章.ISO9000标准)
  14. 小程序常用ui库 组件库
  15. 运输小猫(斜率优化)
  16. Android手机安装原版BT5[ARM]
  17. 史上首例!阿里程序员写的这一行代码,被国家博物馆收藏了
  18. CMD设置代理 注册表设置IE代理
  19. 工作 3 年后的一些思考
  20. 性能测评:腾讯云轻量服务器4核8G12M带宽流量CPU主频型号

热门文章

  1. javascript 重写alert、confirm、prompt 等提示宽框
  2. C#winform listbox多选的取值,采用DataRowView
  3. 树莓派4B装载ROS系统启动摄像头
  4. SideFX Houdini FX中文版
  5. CONTEST1001 题解
  6. puppeteer(headless chrome)实现网站登录
  7. python学习笔记--easy_install和pip
  8. 学数解题160919
  9. 9月19日下午JavaScript数组冒泡排列和二分法
  10. javascript设计模式之观察者模式