怎么用C++实现对一个指定网址的源文件的获取,并保存到本地
如何用C++实现对一个指定网址的源文件的获取,并保存到本地
大二新生,初学MFC,原意是想通过套接字对指定网址的源文件进行获取,但是目前对套接字理解不深,通过看网上一些代码,似乎是通过创建一个线程来获取源文件的,但是具体的原理不懂,所以请CSDN上的各位大神,告诉小弟如何实现这个操作,以及其相应的原理是什么,小弟感激不尽。给分一定给力!!
------解决方案--------------------
大二新生,初学MFC,原意是想通过套接字对指定网址的源文件进行获取,但是目前对套接字理解不深,通过看网上一些代码,似乎是通过创建一个线程来获取源文件的,但是具体的原理不懂,所以请CSDN上的各位大神,告诉小弟如何实现这个操作,以及其相应的原理是什么,小弟感激不尽。给分一定给力!!
------解决方案--------------------
- C/C++ code
#include <iostream.h> #include <string.h> #include <afx.h> #include <afxinet.h> int main() { CInternetSession sess(_TEXT("")); CHttpFile* file = (CHttpFile*)sess.OpenURL(_TEXT("http://www.baidu.com")); CString str; while (file->ReadString(str)) { cout << str.GetBuffer(0) << endl; } file->Close(); cin.get(); return 0; }
------解决方案--------------------
- C/C++ code
#include "winsock2.h" #pragma comment(lib,"ws2_32.lib") #include "iostream.h" #include "stdio.h" initsock() { WSADATA wsData; if(WSAStartup(MAKEWORD(2,2),&wsData)==0) cout<<"success"<<endl;; return 0;} initaddress(sockaddr_in *pa) { pa->sin_family=AF_INET; pa->sin_port= htons(80); // 60002; hostent *hs=gethostbyname("www.baidu.com"); if( hs==NULL) { cout<<"NO TIME"<<endl;return 0; } in_addr ip=*(in_addr *)hs->h_addr_list[0]; pa->sin_addr=ip; cout<<"www.baidu.com "<<inet_ntoa(ip)<<endl; return 0; } int main(int argc, char* argv[]) { initsock(); sockaddr_in addr; initaddress(&addr); SOCKET licon; char buf[1024]={0}; licon=socket(AF_INET,SOCK_STREAM,0); int q=connect(licon,(sockaddr *)&addr,sizeof(addr)); if(q==SOCKET_ERROR) { cout<<GetLastError(); } sprintf(buf,"GET http://www.baidu.com/index.html HTTP/1.0\r\n"); send(licon,buf,strlen(buf),0); sprintf(buf,"host: www.baidu.com\r\n"); send(licon,buf,strlen(buf),0); sprintf(buf,"\r\n"); send(licon,buf,strlen(buf),0); int ret; ret=recv(licon,buf,sizeof(buf),0); cout<<"OOOOO"<<buf<<")))))))))))))"<<endl; return 0; }
------解决方案--------------------
------解决方案--------------------
你加个断点看看到哪步报ASSERT
------解决方案--------------------
你放到MFC里面跑,命令行好像不包含这个头文件的
------解决方案--------------------
把这个博客里的例子放在VS里编译运行。
这个例子是微软的Tear例子,就是负责用HTTP下载资源的
至于如何保存,你就看一下文件操作吧。