VC如何写一个HttpServer的服务器? VC如何写一个HttpServer的服务器? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 MSDN的找不到了http://www.vchelp.net/vchelp/archive.asp?type_id=76&class_id=1&cata_id=5&article_id=738&search_term= http://www.vchelp.net/vchelp/type.asp?class_id=1&type_id=76http服务器 // 这个是我写的简单http server. 只支持静态的HTML网页.//// 测试方法: 把所有的网页文件放在c:/www/目录.默认页面是index.htm#include "stdafx.h"#define FD_SETSIZE 1024#include <winsock2.h>#include <ws2tcpip.h>#include <iostream>#include <crtdbg.h>using namespace std;#pragma comment(lib,"ws2_32.lib")//-------------------------------------------------------------//从接收的字符串中取得文件名//-------------------------------------------------------------bool get_name(const char *buf,char *name){ //定位到第一个空格 while( *buf != ' ' && *buf != '\n') buf++; buf+=2; //跳过其中的'/' if(*buf == ' ') //文件名中只有'/'时,自动设置文件名为index.htm sprintf(name,"index.htm"); else { while( *buf != ' ' && *buf != '\n') *(name++) = *(buf++); *name = '\0'; } return true;}//-------------------------------------------------------------//打包了send()函数,Send()函数将所有数据发完了才返回//-------------------------------------------------------------int Send(SOCKET s,const char *buf,int len){ _ASSERTE(len > 0); int tmp_len; int total_send=0; do { tmp_len = send(s,buf,len,0); if(tmp_len == -1) break; len -= tmp_len; buf += tmp_len; total_send += tmp_len; } while(len >0); return total_send;}//-------------------------------------------------------------//处理接收的数据//-------------------------------------------------------------void process_msg(SOCKET s, const char *buf, int buflen){ char buffer[4096]; char name[512]="c:/www/"; char *pname = name+strlen(name); if(get_name(buf,pname)) //取得完整的文件名 { int nread; int nsend; FILE *fp = fopen(name,"rb"); if(fp != NULL) //发送文件 { do { nread = (int)fread(buffer,1,(int)sizeof(buffer),fp); if(nread == -1) break; nsend = Send(s,buffer,nread); if(nsend != nread) break; } while(!feof(fp)); fclose(fp); } } shutdown(s,SD_BOTH);}/************************************************************************//* 简化版的服务器 /************************************************************************/int main(int argc,char **argv){ //WinSock初始化 WSADATA ws; if(WSAStartup(MAKEWORD(2,2),&ws) != 0) cout << "WSAStartup() error : " << GetLastError() << endl; SOCKET listenfd; SOCKADDR_IN local={0}; local.sin_addr.s_addr = htonl(INADDR_ANY); local.sin_port = htons(1080); local.sin_family = AF_INET; int ret; //绑定,监听 listenfd = socket(AF_INET,SOCK_STREAM,0); if(listenfd == INVALID_SOCKET) { cout << "socket() error : " << WSAGetLastError() << endl; return -1; } ret = bind(listenfd,(SOCKADDR *)(&local),sizeof(local)); if(ret < 0) { cout << "bind() error : " << WSAGetLastError() << endl; return -1; } ret = listen(listenfd,10); if(ret < 0) { cout << "listen() error : " << WSAGetLastError() << endl; return -1; } SOCKET sock; SOCKADDR_IN client_addr; int addr_len; char buffer[4096]={0}; int recv_len; while(1) { addr_len = sizeof(client_addr); //接受连接 sock = accept(listenfd,(SOCKADDR *)&client_addr,&addr_len); if(sock != INVALID_SOCKET) //连接成功 { recv_len = recv(sock,buffer,sizeof(buffer),0); printf(buffer); if(recv_len >0) //收到数据 process_msg(sock,buffer,recv_len); //数据处理 closesocket(sock); } } return 0;} access数据库查当日数据 vc 关于窗口,路过有分 如何得到右键击CTreeCtrl的某一结点的消息? SDK Rebar 的操作. 在word中有什么方法可以得到当前文档中对象Shape的位置与其象素位置的对应比例的吗? 如何获得远程主机的主机名? 非高手勿进!相送100分,如能解决还可多给! 成都想创业的同学来啊 如何直接将剪贴板上的文本写到一个文件里? bug?CListCtrl第一项无法正确刷新的老问题,求一个完美的解决方案。 一道有挑战的判子串算法难题,大家帮我想想怎么解决
http://www.vchelp.net/vchelp/archive.asp?type_id=76&class_id=1&cata_id=5&article_id=738&search_term=
http服务器
//
// 测试方法: 把所有的网页文件放在c:/www/目录.默认页面是index.htm#include "stdafx.h"
#define FD_SETSIZE 1024
#include <winsock2.h>
#include <ws2tcpip.h>
#include <iostream>
#include <crtdbg.h>using namespace std;#pragma comment(lib,"ws2_32.lib")//-------------------------------------------------------------
//从接收的字符串中取得文件名
//-------------------------------------------------------------
bool get_name(const char *buf,char *name)
{
//定位到第一个空格
while( *buf != ' ' && *buf != '\n')
buf++;
buf+=2; //跳过其中的'/' if(*buf == ' ') //文件名中只有'/'时,自动设置文件名为index.htm
sprintf(name,"index.htm");
else
{
while( *buf != ' ' && *buf != '\n')
*(name++) = *(buf++);
*name = '\0';
} return true;
}//-------------------------------------------------------------
//打包了send()函数,Send()函数将所有数据发完了才返回
//-------------------------------------------------------------
int Send(SOCKET s,const char *buf,int len)
{
_ASSERTE(len > 0);
int tmp_len;
int total_send=0;
do
{
tmp_len = send(s,buf,len,0); if(tmp_len == -1)
break; len -= tmp_len;
buf += tmp_len;
total_send += tmp_len;
} while(len >0); return total_send;
}//-------------------------------------------------------------
//处理接收的数据
//-------------------------------------------------------------
void process_msg(SOCKET s, const char *buf, int buflen)
{
char buffer[4096];
char name[512]="c:/www/";
char *pname = name+strlen(name); if(get_name(buf,pname)) //取得完整的文件名
{
int nread;
int nsend; FILE *fp = fopen(name,"rb");
if(fp != NULL) //发送文件
{
do
{
nread = (int)fread(buffer,1,(int)sizeof(buffer),fp);
if(nread == -1)
break; nsend = Send(s,buffer,nread);
if(nsend != nread)
break;
} while(!feof(fp)); fclose(fp);
} } shutdown(s,SD_BOTH);
}/************************************************************************/
/* 简化版的服务器
/************************************************************************/
int main(int argc,char **argv)
{
//WinSock初始化
WSADATA ws;
if(WSAStartup(MAKEWORD(2,2),&ws) != 0)
cout << "WSAStartup() error : " << GetLastError() << endl; SOCKET listenfd;
SOCKADDR_IN local={0};
local.sin_addr.s_addr = htonl(INADDR_ANY);
local.sin_port = htons(1080);
local.sin_family = AF_INET; int ret; //绑定,监听
listenfd = socket(AF_INET,SOCK_STREAM,0);
if(listenfd == INVALID_SOCKET)
{
cout << "socket() error : " << WSAGetLastError() << endl;
return -1;
} ret = bind(listenfd,(SOCKADDR *)(&local),sizeof(local));
if(ret < 0)
{
cout << "bind() error : " << WSAGetLastError() << endl;
return -1;
} ret = listen(listenfd,10);
if(ret < 0)
{
cout << "listen() error : " << WSAGetLastError() << endl;
return -1;
} SOCKET sock;
SOCKADDR_IN client_addr;
int addr_len; char buffer[4096]={0};
int recv_len; while(1)
{
addr_len = sizeof(client_addr); //接受连接
sock = accept(listenfd,(SOCKADDR *)&client_addr,&addr_len);
if(sock != INVALID_SOCKET) //连接成功
{
recv_len = recv(sock,buffer,sizeof(buffer),0);
printf(buffer);
if(recv_len >0) //收到数据
process_msg(sock,buffer,recv_len); //数据处理
closesocket(sock);
} } return 0;
}