我倒是认为题目是 基于tcp/udp实现http应用.(hehe,其实好象http只能是基于tcp/udp的,因为它必须基于ip)
下面是我去年做的一个在linux/QT,包装的一个用于HTTP的简单类(接口同MFC同名类)的一个实现,
大体就这样了.
过一阵子也许我用delphi做一个比较完整的,现在我正在做ftp的
CStdioFile* CInternetSession::OpenURL(char* pstrURL,int dwContext=1,int dwFlags=0,
char* pstrHeaders=NULL,int dwHeaderLenth=0)
{
CStdioFile* pstdiofile;
KURL kurl=(const char *)pstrURL;
int port=kurl.port();
if(port==0)port=80;
const char* Host=kurl.host();
const char* FileName=kurl.httpPath();
QString portstr;
QString filename;
QString message;
struct hostent *server_host_name=new (struct hostent);
server_host_name=gethostbyname((const char *)Host);
struct sockaddr_in pin;
bzero(&pin,sizeof(pin));
pin.sin_family=AF_INET;
pin.sin_addr.s_addr=htonl(INADDR_ANY);
pin.sin_addr.s_addr=
((struct in_addr*)(server_host_name->h_addr))->s_addr;
pin.sin_port=htons(port);
//BasicSocket pBasicSocket;
int handle=socket(AF_INET,SOCK_STREAM, 0);
if(handle==-1)
{
perror("error socket");
return NULL;
}
//pBasicSocket.Create();
if(connect(handle,(const SOCKADDR*)&pin,sizeof(pin))==-1)
{
perror("error connect");
return NULL;
}
message=QString("GET ")+QString(FileName)+QString(" HTTP/1.0/r/nConnection:Keep-Alive/r/n/n");
send(handle,(const char*)message,message.length(),0);
pstdiofile=new CStdioFile(handle,IO_ReadWrite);
return pstdiofile;
}