静态HTML服务器
主要代码
#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服务器的更多相关文章
- Harp – 内置常用预处理器的静态 Web 服务器
Harp 是一个基于 Node.js 平台的静态 Web 服务器,内置流行的预处理器,支持把 Jade, Markdown, EJS, Less, Stylus, Sass, and CoffeeSc ...
- 超简易静态Web服务器
使用 HttpListener 写的一个超简易静态Web服务器 开发环境:VS2010 + .NET2.0 http://files.cnblogs.com/zjfree/EasyIIS.rar
- Fenix – 基于 Node.js 的桌面静态 Web 服务器
Fenix 是一个提供给开发人员使用的简单的桌面静态 Web 服务器,基于 Node.js 开发.您可以同时在上面运行任意数量的项目,特别适合前端开发人员使用. 您可以通过免费的 Node.js 控制 ...
- Nginx作为静态内容服务器(Windows环境)
1.简单安装 1)下载 http://nginx.org/en/download.html 2)解压后的路径 E:\Study\nginx\nginx-1.7.6 3)执行nginx.exe,访问ht ...
- 使用Node.js搭建静态资源服务器
对于Node.js新手,搭建一个静态资源服务器是个不错的锻炼,从最简单的返回文件或错误开始,渐进增强,还可以逐步加深对http的理解.那就开始吧,让我们的双手沾满网络请求! Note: 当然在项目中如 ...
- 04-HTTP协议和静态Web服务器
一.HTTP协议(HyperText Transfer Protocol) 超文本传输协议,超文本是超级文本的缩写,是指超越文本限制或者超链接,比如:图片.音乐.视频.超链接等等都属于超文本. ...
- 初始nginx(启动运行) 使用nginx做一个简单的静态资源服务器
第一次接触nginx的时候,那时候公司还是用的一些不知名的小技术,后来公司发展问题,重新招了人,然后接触到nginx,公司 使用nginx用来做代理服务器,所有请求 都先经过nginx服务器,然后交由 ...
- 使用 Express 实现一个简单的 SPA 静态资源服务器
背景 限制 SPA 应用已经成为主流,在项目开发阶段产品经理和后端开发同学经常要查看前端页面,下面就是我们团队常用的使用 express 搭建的 SPA 静态资源服务器方案. 为 SPA 应用添加入口 ...
- Nginx——静态资源服务器(一)
java web的项目中,我们经常将项目部署到Tomcat或者jetty上,可以通过Tomcat或者jetty启动的服务来访问静态资源.但是随着Nginx的普及,用Nginx来作为静态资源服务器,似乎 ...
- 【原创】分布式之缓存击穿 【原创】自己动手实现静态资源服务器 【原创】自己动手实现JDK动态代理
[原创]分布式之缓存击穿 什么是缓存击穿 在谈论缓存击穿之前,我们先来回忆下从缓存中加载数据的逻辑,如下图所示 因此,如果黑客每次故意查询一个在缓存内必然不存在的数据,导致每次请求都要去存储层去查 ...
随机推荐
- StreamSets Data Collector Edge 说明
Data Collector Edge 是不包含界面的agent 安装 下载包 https://streamsets.com/opensource tar xf streamsets-datacoll ...
- yarn import 使用package-lock.json
yarn 1.7(目前最新的版本)支持npm 的package-lock.json 了 环境准备 安装更新yarn sudo npm install -g yarn 查看版本 yarn version ...
- mysql中distinct
1.Distinct 位置 单独的distinct只能放在开头,否则报错,语法错误,与其他函数使用时候,没有位置限制如下 Select player_id,count(distinct(task_id ...
- DevExpress GridControl 单元格添加进度条(ProgressBar)
首先可以使用DevExpress GridControl 自带的进度条控件. 但是我要用一个方法来设置所以的单元格进度,而不是每个单元格都要设置一遍,同时我想要根据进度值不同,进度条显示不同的颜色. ...
- ipython的使用
改初始路径 还有一个坑,可以用notebook打开一个已经存在的文件,但是不能正常编辑(使用单元编辑),因为使用这个创建的东西根本就不是一个.py文件,如果代码编辑完毕,倒是可以通过下载那里选择下载成 ...
- springboot获取项目跟目录
springboot部署之后无法获取项目目录的问题: 之前看到网上有提问在开发一个springboot的项目时,在项目部署的时候遇到一个问题:就是我将项目导出为jar包,然后用java -jar ...
- 好记性不如烂笔头--linux学习笔记8关于nginx的动静分离
动静分离逻辑梳理 就是给nginx配置访问规则,不同后缀的文件访问不同的目录 worker_processes 1; events { worker_connections 1024; } http ...
- WPF 出现“调用线程无法访问此对象,因为另一个线程拥有该对象”
引起这种错误多半是由于在非UI线程刷新界面,解决此问题可以使用Dispatcher this.Dispatcher.Invoke(new Action(() => { UpdateUI(stri ...
- leetcode38
public class Solution { public string CountAndSay(int n) { //1 //11 //21 //1211 //111221 //312211 // ...
- 10个免费的在线Markdown编辑器
1. StackEdit StackEdit是一个很用特色的免费在线Markdown编辑器. 有一个非常不错的工具栏,可与云存储同步,以URL形式导入文件或者直接从硬盘打入.他还有一个亮点就是,可以减 ...