主要代码

#pragma once
#include "pre.h"
#include <thread>

NAMESPACE(DEF)

class Socket {
public:
Socket() :s_(INVALID_SOCKET){}
~Socket() {
if(INVALID_SOCKET != s_)
closesocket(s_);
s_ = INVALID_SOCKET;
}
bool Init(SOCKET& s) {
s_ = s;
s = INVALID_SOCKET;
return true;
}
bool Init(SOCKET&& s) {
s_ = s;
s = INVALID_SOCKET;
return true;
}
bool Init() {
s_ = socket(AF_INET, SOCK_STREAM, 0);
if (INVALID_SOCKET == s_)
return false;
return true;
}
void Reset() {
s_ = INVALID_SOCKET;
}
Socket(Socket& s) {
s_ = s.getsock();
s.Reset();
}
SOCKET getsock() { return s_; }

private:
const Socket& operator=(const Socket& s);
SOCKET s_;
};

class SockManager {
public:
bool StartListen() {
Socket s;
if (!s.Init())
return false;
if (bind(s.getsock(), (LPSOCKADDR)&serv_, sizeof(serv_)) == SOCKET_ERROR){
std::cerr<<"bind()failed: "<<WSAGetLastError()<<std::endl;
return false;
}
if (listen(s.getsock(), 5) == SOCKET_ERROR){
std::cerr << "listen()failed: " << WSAGetLastError() << std::endl;
return false;
}
struct sockaddr_in cliet;
int iLen = sizeof(cliet);

while (1) {
Socket rs;
rs.Init( accept(s.getsock(),(struct sockaddr*)&cliet,&iLen) );
if (INVALID_SOCKET == rs.getsock()) {
std::cerr << "accept() failed: " << WSAGetLastError() << std::endl;
return false;
}
std::cout << "accepted client IP :[" << inet_ntoa(cliet.sin_addr) << "],port:[" <<
ntohs(cliet.sin_port) << "]\n";
std::thread (&SockManager::SockHandleThread,this, rs).detach();
}

return true;
}

SockManager(int port = 9999) :port_(port) {
serv_.sin_family = AF_INET;
serv_.sin_port = htons(port_);
serv_.sin_addr.s_addr = htonl(INADDR_ANY);
}

private:
bool ServerStatic(Socket&, char*, long);
void SockHandleThread(Socket s);
int port_;
struct sockaddr_in serv_;
};

ENDNAMESPACE(DEF)

参考

深入理解计算机系统

静态HTML服务器的更多相关文章

  1. Harp – 内置常用预处理器的静态 Web 服务器

    Harp 是一个基于 Node.js 平台的静态 Web 服务器,内置流行的预处理器,支持把 Jade, Markdown, EJS, Less, Stylus, Sass, and CoffeeSc ...

  2. 超简易静态Web服务器

    使用 HttpListener 写的一个超简易静态Web服务器 开发环境:VS2010 + .NET2.0 http://files.cnblogs.com/zjfree/EasyIIS.rar

  3. Fenix – 基于 Node.js 的桌面静态 Web 服务器

    Fenix 是一个提供给开发人员使用的简单的桌面静态 Web 服务器,基于 Node.js 开发.您可以同时在上面运行任意数量的项目,特别适合前端开发人员使用. 您可以通过免费的 Node.js 控制 ...

  4. Nginx作为静态内容服务器(Windows环境)

    1.简单安装 1)下载 http://nginx.org/en/download.html 2)解压后的路径 E:\Study\nginx\nginx-1.7.6 3)执行nginx.exe,访问ht ...

  5. 使用Node.js搭建静态资源服务器

    对于Node.js新手,搭建一个静态资源服务器是个不错的锻炼,从最简单的返回文件或错误开始,渐进增强,还可以逐步加深对http的理解.那就开始吧,让我们的双手沾满网络请求! Note: 当然在项目中如 ...

  6. 04-HTTP协议和静态Web服务器

    一.HTTP协议(HyperText Transfer Protocol)     超文本传输协议,超文本是超级文本的缩写,是指超越文本限制或者超链接,比如:图片.音乐.视频.超链接等等都属于超文本. ...

  7. 初始nginx(启动运行) 使用nginx做一个简单的静态资源服务器

    第一次接触nginx的时候,那时候公司还是用的一些不知名的小技术,后来公司发展问题,重新招了人,然后接触到nginx,公司 使用nginx用来做代理服务器,所有请求 都先经过nginx服务器,然后交由 ...

  8. 使用 Express 实现一个简单的 SPA 静态资源服务器

    背景 限制 SPA 应用已经成为主流,在项目开发阶段产品经理和后端开发同学经常要查看前端页面,下面就是我们团队常用的使用 express 搭建的 SPA 静态资源服务器方案. 为 SPA 应用添加入口 ...

  9. Nginx——静态资源服务器(一)

    java web的项目中,我们经常将项目部署到Tomcat或者jetty上,可以通过Tomcat或者jetty启动的服务来访问静态资源.但是随着Nginx的普及,用Nginx来作为静态资源服务器,似乎 ...

  10. 【原创】分布式之缓存击穿 【原创】自己动手实现静态资源服务器 【原创】自己动手实现JDK动态代理

    [原创]分布式之缓存击穿   什么是缓存击穿 在谈论缓存击穿之前,我们先来回忆下从缓存中加载数据的逻辑,如下图所示 因此,如果黑客每次故意查询一个在缓存内必然不存在的数据,导致每次请求都要去存储层去查 ...

随机推荐

  1. Dijkstra算法(C语言)

    Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Di ...

  2. java编程排序之自定义类型的集合,按业务需求排序

    自定义引用类型放入集合中,按实际业务需求进行排序的两种思路 第一种思路: (1)自定义实体类实现java.lang.Comparable接口,重写public int compareTo(Object ...

  3. 数据库Job定时任务

    数据库Job再熟悉不过了,因为经常要数据库定时的自动执行一些脚本,或做数据库备份,或做数据的提炼,或做数据库的性能优化,包括重建索引等等的工作.但是,Oracle定时器Job时间的处理上,千变万化,今 ...

  4. streamsets 丢踢无关数据

    对于不需要的数据,streamsets 可以方便的设置丢踢,我们可以通过定义require 字段或者前置条件进行配置 require(必须字段) 必须字段是必须存在一条record 中的,对于不存在的 ...

  5. ②Jenkins集成—集成构建部署

    之前的博文介绍了Jenkins的入门安装,本文主要介绍如何使用jenkins进行git项目的集成构建与部署 1.首先进行全局工具配置 查看下本机的jdk.maven.git安装路径 echo $PAT ...

  6. oracle 表空间总结

                           表空间总结  一.认识表空间 1:表空间概念: 表空间是数据库中最大的逻辑单位,Oracle数据库采用表空间将相关的逻辑组件组合在一起,一个Oracle数 ...

  7. 360全景技术支持中心(KRPanoGUI三维全景制作软件)

    http://www.360pano.cn/ http://www.360pano.cn/88/ http://www.suse.edu.cn/qjmy/hd/index.html

  8. Python 定期检查Build_setting的编译情况

    #!/usr/bin/python #_*_ coding:utf-8 _*_ import time from email.MIMEText import MIMEText from email.M ...

  9. Plex音乐名称乱码原因id3版本

    标签编码支持情况: ID3v1:ISO-8859-1ID3v2 2.3:ISO-8859-1.UTF-16ID3v2 2.4:ISO-8859-1.UTF-16.UTF-8APEv2:UTF-8 修改 ...

  10. Charles使用1

    Charles是一款比较常用的全平台的网络封包街区工具,而我们在做移动开发的时候,我们为了调试.测试.分析等目的,经常需要和服务端的网络通讯协议打交道.Charles可以帮我们截取网络数据包来进行分析 ...