C/C++ codeBOOL DownloadFile(LPCSTR pstrURL, LPCSTR pstrSaveFileName, BOOL bBinary = TRUE)
{
CInternetSession sess;
CStdioFile *pHttpFile = NULL;
DWORD dwHttpFlag = INTERNET_OPEN_TYPE_PRECONFIG
| INTERNET_FLAG_EXISTING_CONNECT
| INTERNET_FLAG_NO_AUTO_REDIRECT
// | INTERNET_FLAG_RELOAD
| INTERNET_FLAG_NO_COOKIES
// | INTERNET_FLAG_DONT_CACHE
// | INTERNET_FLAG_PRAGMA_NOCACHE
| INTERNET_FLAG_MAKE_PERSISTENT
;
UINT nSaveFlag = CFile::modeCreate | CFile::modeWrite;
if(bBinary)
{
dwHttpFlag |= INTERNET_FLAG_TRANSFER_BINARY;
nSaveFlag |= CFile::typeBinary;
}
else
{
dwHttpFlag |= INTERNET_FLAG_TRANSFER_ASCII;
nSaveFlag |= CFile::typeText;
}
try
{
sess.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT,32000);
sess.SetOption(INTERNET_OPTION_CONNECT_BACKOFF,1000);
sess.SetOption(INTERNET_OPTION_CONNECT_RETRIES,5);
pHttpFile = sess.OpenURL(pstrURL, 1, dwHttpFlag);
}
catch(CInternetException *e)
{
TCHAR tszErr[1024];
if(e-> GetErrorMessage(tszErr, sizeof(tszErr)))
{
AfxMessageBox(tszErr);
}
e-> Delete();
return FALSE;
}
if(NULL == pHttpFile)
{
return FALSE;
}
CStdioFile fout;
if( !fout.Open(pstrSaveFileName, nSaveFlag) )
{
delete pHttpFile;
sess.Close();
return FALSE;
}
if(bBinary)
{
#define BUF_LEN 1024 * 8
BYTE tszBuff[BUF_LEN] = {0};
UINT nRead = 0;
while( (nRead = pHttpFile-> Read(tszBuff, BUF_LEN)) > 0)
{
fout.Write(tszBuff, nRead);
}
#undef BUF_LEN
}
else
{
CString str = _T( " ");
while(pHttpFile-> ReadString(str))
{
str += _T( "\n ");
fout.WriteString(str);
}
}
fout.Close();
delete pHttpFile;
sess.Close();
return TRUE;
}
------解决方案--------------------
随手写了个,没加错误处理。
代码:C/C++ code#include
#include
#pragma comment(lib,"Ws2_32.lib")
int main()
{
WSADATA wsa;
WSAStartup(MAKEWORD(2,2),&wsa);
SOCKET serverSocket;
serverSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
struct sockaddr_in serverAddress;
memset(&serverAddress,0,sizeof(sockaddr_in));
serverAddress.sin_family=AF_INET;
serverAddress.sin_addr.S_un.S_addr = inet_addr("211.100.26.77");
serverAddress.sin_port = htons(80);
connect(serverSocket,(struct sockaddr*)&serverAddress,sizeof(serverAddress));
char * msgHttpRequest = "GET /index.html HTTP/1.1\r\n"
"Host:csdn.net\r\n\r\n";
send(serverSocket,msgHttpRequest,strlen(msgHttpRequest),0);
char recvBuff[1024] = { 0 };
recv(serverSocket,recvBuff,1024,0);
printf("%s\n",recvBuff);
return 0;
}