ACE第二个练习:简单的Web服务

#include "ace/SOCK_Acceptor.h"
#include "ace/SOCK_Stream.h"
#include "ace/Mem_Map.h"
#include "ace/Auto_Ptr.h"

extern char* get_url_pathname(ACE_SOCK_Stream* peer){
	return "test.txt";
}

int ACE_TMAIN(int argc, ACE_TCHAR* argv[]) {

	ACE_INET_Addr		server_addr;
	ACE_SOCK_Acceptor	acceptor;
	ACE_SOCK_Stream		peer;

	if (server_addr.set(80) == -1) return 1;
	if (acceptor.open(server_addr) == -1) return 1;

	while (1)
	{
		if (acceptor.accept(peer) != -1) {

			peer.disable(ACE_NONBLOCK);		// 确保阻塞的send_n
			//ACE_Auto_Array_Ptr<char> pathname(get_url_pathname(&peer));			// ACE_Auto_Array_Ptr<X> 对象在析构时会释放其构造时的对应指针的内存
			ACE_Mem_Map mapped_file(get_url_pathname(&peer)/*pathname.get()*/);

			if (peer.send_n(mapped_file.addr(), mapped_file.size()) == -1) return 1;
				peer.close();

		}
	}
	
	return acceptor.close() ==  -1 ? 1 : 0;
}


在工作目录添加"test.txt"文件,内容为:Hello World!

编译运行,在浏览器中输入http://127.0.0.1:80

posted on 2012-03-04 11:56  几百人有爱  阅读(220)  评论(0编辑  收藏  举报