主要代码

#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. [TopCoder14647]HiddenRabbits

    vjudge description 有一棵\(n\)个节点的树和\(m\)只兔子,每只兔子要住在一个点上(可以多只兔子住在同一个点上).有\(q\)组要求,每组形如"当以\(r\)为根时, ...

  2. 【java基础】java字符串之StringBuffer和StringBuilder

    [一]简述区别 package com.sxf.test.string; public class StringBufferStringBuilderTest { public static void ...

  3. 浅谈iOS学习之路(转)

    转眼学习iOS已经快两年的时间了,这个路上有挫折也有喜悦,一步步走过来发现这个过程是我这一辈子的财富,我以前的老大总是对我说,年轻就是最大的资本(本人91年),现在才算是慢慢的体会到,反观自己走过的这 ...

  4. swagger api 转graphql npm 包试用

    graphql 比较方便的进行api 的查询,操作,swagger 是一个方便的open api 描述标准,当前我们有比较多的 restapi 但是转换为graphql 是有成本的,还好swagger ...

  5. javaweb经典面试题

    1.hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得java程序员可以随心所欲的使用对象编程思维来操纵数据库. 工作原理: 1.读取并解析配置文件2. ...

  6. (原创)AP6212蓝牙模块在am335x控制板上的应用

    主控板wifi模块调通后接着调试蓝牙,经过两周的摸索,终于把蓝牙应用基本建立起来,下面记录下大概流程. 1.硬件管脚设置 static void uart4_init(int evm_id, int ...

  7. java微信 客服接口-发消息 中文乱码

    /** * 向指定 URL 发送POST方法的请求 * * @param url *            发送请求的 URL * @param param *            请求参数,请求参 ...

  8. java 面向对象 — 多态

    注意:如果用父类引用指向子类对象的时候.不可以调用,子类中有但是父类中没有的方法. 抽象 方法没有具体方法,以分号结束.例:public abstract void call(); 1.接口必须要有a ...

  9. MoveWindow() SetWindowPos()的区别于联系

    敲代码时,突然发现有一个背景图片无法显示,百思不得其解,最终发现是MoveWindow() SetWindowPos()这两个函数的使用不当造成的. 这里把这两个函数的前世今生给分析一下. 先看Mov ...

  10. 双系统(Windows+Ubuntu)重装Ubuntu后,修复引导

    重装Ubuntu后,重启机器,Windows系统消失了.进入BIOS修改启动顺序,Windows系统恢复了,但是,刚装好的Ubuntu没了,一开机,电脑自动进入Windows. 解决办法: 用装系统的 ...