向頁面發送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;
}
從拆分後的字符串中取出時間。