用SOCKET建立HTTP连接?高分!~
如何用C++实现建立HTTP连接呢?
不使用MFC里的CHttpConnection类等元素,使用SOCKET来实现?
如果谁有这方面的实例能发给我吗?
E-mail:ukyoukyo@sina.com
问题点数:100、回复次数:16Top
1 楼striking(庸人自扰)回复于 2006-03-13 10:52:37 得分 10
准备学习。。Top
2 楼laiyiling(陌生人[MVP])回复于 2006-03-13 11:10:01 得分 20
http://topic.csdn.net/t/20030910/17/2245692.html
http://topic.csdn.net/t/20030112/20/1351658.htmlTop
3 楼gohappy_1999(碧水蓝天)回复于 2006-03-13 12:00:25 得分 5
gzTop
4 楼iceeajp(代理主教)回复于 2006-03-13 12:01:48 得分 0
楼上的东西不错!
还有其他的资料么,我想多看一点,除了HTTP,还有FTP等!~Top
5 楼wangjia184(我就是传说中的。。。。。。SB)回复于 2006-03-13 12:35:24 得分 5
socket 直接连上去 协议很简单 Get Post 就可以了Top
6 楼iceeajp(代理主教)回复于 2006-03-14 08:55:52 得分 0
还有更多的资料么?虽然已经有很有用的,不过想再参考多点,也让有同样疑惑的弟兄们多学一点东西Top
7 楼echomo123(无语)回复于 2006-03-14 16:49:13 得分 5
MARKTop
8 楼bohlee(我心澎湃)回复于 2006-03-14 21:01:48 得分 5
估计搂主是完美主义者Top
9 楼iceeajp(代理主教)回复于 2006-03-15 09:16:33 得分 0
楼上的猜对了,真厉害,你怎么知道的?Top
10 楼iceeajp(代理主教)回复于 2006-03-16 15:14:01 得分 0
等待回复中Top
11 楼LongLongAgoImBoy(ThereIsAMe)回复于 2006-03-16 16:04:29 得分 5
小心吃多了撑着啊,哈哈Top
12 楼jinxuliang(smielfox)回复于 2006-03-17 19:21:54 得分 20
正好我在看http隧道,给你copy一段:是重载了的,就是发送send
CString Line;
Line.Format("CONNECT %s:%d HTTP/1.0",lpszHost,nPort);
(*this)<<Line;
Line.Format("host: %s:%d",lpszHost,nPort);
(*this)<<Line;
Line.Empty();
(*this)<<Line;
(*this)>>Line;
int i = Line.Find(' ');
if(i!=-1)
Line = Line.Mid(i+1);
if(Line.Left(3)!="200")
{
// Sorry Guys Http Proxy Authentication Not Implemented !!!
if(Line.Left(3)=="407")
{
AfxMessageBox("Sorry Guys Http Proxy Authentication Not Implemented in Demo!!!");
}
throw new CSocketException("Proxy Connection Denied",Line.Mid(4));
}
do
{
(*this)>>Line;
if(Line.IsEmpty())
break;
}while(true);
Top
13 楼iceeajp(代理主教)回复于 2006-04-03 10:15:36 得分 0
要现在结帖么?Top
14 楼ajn_sailing(飞鸟Andrew)回复于 2006-04-03 19:13:32 得分 5
wwTop
15 楼cctcop75(Delphi)回复于 2006-04-03 19:54:21 得分 20
通过Winsock基于HTTP协议实现HTTP客户应用程序
-- --首先我将创建一个帮助函数LogFile(),该函数把传递给它的字符串写到磁盘文件中。然后再创建本示例的核心函数--HttpClient()。在这个核心函数中,我将通过Winsock连接到HTTP服务器上(本例中我将使用计算机世界日报168.160.224.185)。当连接成功后,发送 Get命令到HTTP服务器去下载指定路径上(/99/tips/)的文件。通过帮助函数LogFile()把下载的数据记录到本地磁盘文件中。
charfname[MAXPATH];
voidLogFile(char*p)
{
FILE*fp=fopen(fname,"a+");
fprintf(fp,"%s\n",p);
fclose(fp);
}
BOOL HttpClient(void)
{
WSADATAws;
SOCKETs;
struct sockaddr_inaddr;
intiResult;
longlResult;
char strSubAddr[100],strBuffer[100];
lResult=WSAStartup(0x0101,&ws);
s=socket(AF_INET,SOCK_STREAM,0);
addr.sin_family=AF_INET;
addr.sin_port=htons(80);
addr.sin_addr.s_addr=inet_addr("168.160.224.185");
iResult=connect(s,(structsockaddr*)&addr,sizeof(addr));
if(SOCKET_ERROR==iResult)
{
//连接失败
WSACleanup();
returnFALSE;
}
else{
//连接成功
strcpy(strSubAddr,"GET/99/tips/\r\n");
strcpy(fname,"index.htm");
iResult=send(s,strSubAddr,strlen(strSubAddr),0);
//下载文件
do{
strset(strBuffer,'');
iResult=recv(s,strBuffer,sizeof(strBuffer),0);
LogFile(strBuffer);
}while(iResult!=0);
}
WSACleanup();
returnTRUE;
}
三、测试
----打开VisualC++5.0,用MFC创建基于对话框的工程Test,并在对话框上放置"Test"按钮,然后添加测试代码。
VoidCTestDlg::OnTest()
{
HttpClient();
}
Top
16 楼iceeajp(代理主教)回复于 2006-05-18 08:54:19 得分 0
太久没来了,忘记结帖了!
现在结了.UP的都有分哦!Top




