向頁面發送http請求獲取服務器時間

向頁面發送http請求獲取服務器時間

BOOL BjcaFunc::GetNetTime(string &year, string &month, string &day)   
{ 
    WSADATA WSAData;  
    ::WSAStartup (MAKEWORD(2,2), &WSAData);  
    SOCKET sockeId;  
    SOCKADDR_IN addr;  //IPPROTO_TCP
    if (-1 == (sockeId = socket(AF_INET, SOCK_STREAM, 0)))
        return FALSE;

    hostent *pht = gethostbyname("www.360.cn");
    if(pht == NULL){
        return false;
    }
    char pstr[20] = {0};
    sprintf(pstr,"%d.%d.%d.%d",(pht->h_addr_list[0][0]&0x00ff),(pht->h_addr_list[0][1]&0x00ff),(pht->h_addr_list[0][2]&0x00ff),(pht->h_addr_list[0][3]&0x00ff));
    addr.sin_addr.S_un.S_addr = inet_addr(pstr); //域名轉IP

    addr.sin_family = AF_INET;
    addr.sin_port = htons(80);	
    if (SOCKET_ERROR == connect(sockeId, (SOCKADDR * )&addr, sizeof(addr))){
        closesocket(sockeId);
        WSACleanup();
        return FALSE;
    }
    char Timehead[] =  "HEAD / HTTP/1.1\r\nhost: www.360.cn\r\nConnection: Close\r\n\r\n";
    if (SOCKET_ERROR == send(sockeId, Timehead, strlen(Timehead), 0)){
        closesocket(sockeId);
        WSACleanup();
        return FALSE;
   }
   char recvInfo[BUFFSIZE_H];
   ZeroMemory(recvInfo,BUFFSIZE_H);
   recv(sockeId, recvInfo, BUFFSIZE_H, 0);
   closesocket(sockeId);
   WSACleanup();    //recvInfo就是返回的請求信息,解析字符串得到時間 
   std::vector<string> retStr;
   SplitString(string(recvInfo), "\r\n", retStr);    //拆分字符串,"Date:"後面就是時間
   std::vector<string> retStrTime;
   SplitString(retStr[1], " ", retStrTime);
   day = retStrTime[2];
   month = retStrTime[3];
   year = retStrTime[4];
   return TRUE;
}

從拆分後的字符串中取出時間。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章