⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chttpsvr.h

📁 sun Linux 下的网络编程
💻 H
字号:
   /*******************************************************************
   *	cHttpsvr.h
   *    DESCRIPTION:http-server类的头文件
   *
   *    AUTHOR:yyc---yycmail@263.sina.com
   *		   http://yycnet.yeah.net   
   *    HISTORY:
   *
   *    DATE:2002-6-28
   *
   *******************************************************************/
#ifndef __CHTTPSVR_H__
#define __CHTTPSVR_H__


#include "cSocket.h"
#include "cHttpreq.h"
#include "cMap.h"

namespace yyc
{
//浏览器请求用户自定义处理函数声明
//如果函数返回-1,则不关闭浏览器socket连接,等待浏览器关闭
typedef int(FUNC_DOREQ)(cSocket * psock,cHttpreq * phttpreq);

class cHttpsvr
{
private:
	cSocket *m_pSocksvr;//侦听cSocket服务对象
	int m_iPort;//侦听端口
	int m_iStatus;//cHttpsvr状态 0-未启动 1-侦听服务启动
	//保存URL和此URL的处理函数映射
	std::map<std::string,FUNC_DOREQ *> m_mapUrlfunc;
	//保存每个csocket对象和此cSocket对象接收的http请求数据对象映射
	cMap<cSocket *,cHttpreq> m_reqmap;
private:
	//处理cSocket对象的接收数据
	static int do_browserreq(char *buf,int len,cSocket *psock);
public:
	//发送文本文件到浏览器
	static void send_text_file(cSocket *psock,const char * filename);
	//发送二进制文件
	static void send_file(cSocket *psock,const char * filename);
public:
	enum
	{
		HTTPSVR_STOP,
		HTTPSVR_START
	};
	cHttpsvr(){
		m_iPort=0;
		m_pSocksvr=NULL;
		m_pSocksvr=new cSocket;
		if(m_pSocksvr!=NULL){
			m_pSocksvr->set_pfDodata(&do_browserreq);
			m_pSocksvr->set_pArgs((void *)this);
		}
	}
	~cHttpsvr(){
		stop();
		if (m_pSocksvr!=NULL)
			delete m_pSocksvr;
	}

	
	/**
	 * 启动http服务
	 * 
	 * @param port_p http服务端口,如果为0,则系统自动分配
	 * 
	 * @return http服务侦听端口,<0发生错误
	 */
	int start(int iPort);
	int stop();
	int add_url(const char * url,FUNC_DOREQ * pfunc);
	//得到某个url的处理地址
	FUNC_DOREQ *get_url_addr(const char *url);
	int del_url(const char * url);
};
}//?namespace yyc
#endif








⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -