1. #pragma comment(lib, "ws2_32.lib") 
  2.  
  3. //远程IP,port,要下载的文件的绝对路径,本地保存的绝对路径 
  4. bool  GetHTTP(string sRemoteIP,u_short nRemotePort,string sRemoteFilePath,string sSavePath) 
  5.   { 
  6.       try 
  7.       { 
  8.           WORD wVersionRequested = MAKEWORD(1,1); 
  9.           WSADATA wsaData; 
  10.           int nRet; 
  11.           nRet = WSAStartup(wVersionRequested, &wsaData); 
  12.           if (nRet) 
  13.           { 
  14.               char ermsg[1024]={0}; 
  15.               sprintf_s(ermsg,"download %s,WSAStartup() error,error code : %d",sRemoteFilePath, nRet); 
  16.               throw ermsg; 
  17.           } 
  18.  
  19.           if (wsaData.wVersion != wVersionRequested) 
  20.               throw "WinSock version not supported"
  21.  
  22.           SOCKET Socket;     
  23.  
  24.           Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); 
  25.           if (Socket == INVALID_SOCKET) 
  26.           { 
  27.               char ermsg[1024]={0}; 
  28.               sprintf_s(ermsg,"download %s,socket() error,error code : %d", sRemoteFilePath,WSAGetLastError()); 
  29.  
  30.               throw ermsg; 
  31.           } 
  32.  
  33.           // Find the port number for the HTTP service on TCP 
  34.           SOCKADDR_IN saServer; 
  35.           saServer.sin_port = htons(nRemotePort); 
  36.           saServer.sin_family = AF_INET; 
  37.           saServer.sin_addr.s_addr = inet_addr(sRemoteIP.c_str()); 
  38.  
  39.           nRet = connect(Socket, (LPSOCKADDR)&saServer, sizeof(SOCKADDR_IN)); 
  40.           if (nRet == SOCKET_ERROR) 
  41.           { 
  42.               char ermsg[1024]={0}; 
  43.               sprintf_s(ermsg,"download %s,connect() error,error code : %d",sRemoteFilePath, WSAGetLastError()); 
  44.               closesocket(Socket); 
  45.               throw ermsg; 
  46.           } 
  47.  
  48.           // Format the HTTP request 
  49.           char szBuffer[102400]; 
  50.  
  51.           sprintf_s(szBuffer, "GET %s\n", sRemoteFilePath.c_str()); 
  52.           nRet = send(Socket, szBuffer, strlen(szBuffer), 0); 
  53.           if (nRet == SOCKET_ERROR) 
  54.           { 
  55.               char ermsg[1024]={0}; 
  56.               sprintf_s(ermsg,"download %s,send() error,error code : %d", sRemoteFilePath,WSAGetLastError()); 
  57.               closesocket(Socket); 
  58.               throw ermsg; 
  59.           } 
  60.  
  61.           FILE *fp ; 
  62.           int nError = fopen_s(&fp,sSavePath.c_str(),"wb"); 
  63.           if (nError) 
  64.           { 
  65.               char ermsg[10240]={0}; 
  66.               sprintf_s(ermsg,"save %s file error.", sSavePath.c_str()); 
  67.               closesocket(Socket); 
  68.               throw ermsg; 
  69.           } 
  70.  
  71.           while(1) 
  72.           { 
  73.               nRet = recv(Socket, szBuffer, sizeof(szBuffer), 0); 
  74.               if (nRet == SOCKET_ERROR) 
  75.               { 
  76.                   char ermsg[1024]={0}; 
  77.                   sprintf_s(ermsg,"download %s,recv() error,error code : %d",sRemoteFilePath, WSAGetLastError());     
  78.                   closesocket(Socket); 
  79.                   throw ermsg; 
  80.               } 
  81.  
  82.               if (nRet == 0) 
  83.                   break
  84.  
  85.               fwrite(szBuffer, nRet, 1, fp); 
  86.           } 
  87.           fclose(fp); 
  88.           closesocket(Socket); 
  89.           WSACleanup(); 
  90.       } 
  91.       catch ( char* sErrMsg) 
  92.       { 
  93.           Logging tLog; 
  94.           tLog.InitLog(); 
  95.           tLog.WriteLog(ERRLOG, true, sErrMsg); 
  96.  
  97.           WSACleanup(); 
  98.           return false
  99.       } 
  100.      
  101.       return true
  102.   }