代碼參照網絡上的一些代碼,如需删除請告知
static int TimeGet()
{
struct sockaddr_in from_addr; /*伺服器端位址*/
struct sockaddr_in server_addr; /*伺服器端位址*/
int sock , ret , rec_len , server_len;
char count = 0;
unsigned long m_serverTime[1024] = { 0 };
unsigned char msg[48]={010,0,0,0,0,0,0,0,0}; // the packet we send
fd_set readfds;
unsigned long tmit;
struct timeval timeout;
timeout.tv_sec = 1; /*set the timeout to 10 seconds*/
timeout.tv_usec = 0;
time_t t = time(NULL);
struct tm *tp = localtime(&t);
// 中原標準時間
printf("%d/%d/%d\n", tp->tm_mon + 1, tp->tm_mday, tp->tm_year + 1900);
printf("%d:%d:%d\n", tp->tm_hour, tp->tm_min, tp->tm_sec);
sock = socket(AF_INET, SOCK_DGRAM, 0);/*建立資料報套接字*/
if( sock < 0 )
{
printf("---------HandleIPFound: socket init error\n");
return -1;
}
server_len = sizeof(struct sockaddr_in);
/*資料清零*/
memset((void*)&from_addr, 0, sizeof(struct sockaddr_in));
memset((void*)&server_addr, 0, sizeof(struct sockaddr_in));
/*清空記憶體内容*/
from_addr.sin_family = AF_INET; /*協定族*/
from_addr.sin_addr.s_addr = inet_addr("200.20.186.76");/*本地位址*/
from_addr.sin_port = htons(123); /*偵聽端口*/
printf("+++++++++++------------Connect: success\n\n\n");
if((rec_len = sendto(sock,msg,sizeof(msg),0,(struct sockaddr *)&from_addr,sizeof(from_addr))) < 0)
{
perror("\n\n sendto error\n\n");
return -1;
}
printf("+++++++++++------------sendto: success\n\n\n");
while(1)
{
sleep(1);
FD_ZERO(&readfds);
FD_SET(sock, &readfds);
if ((ret = select(sock + 1, &readfds, NULL, NULL, &timeout)<= 0))
{
count ++ ;
if(count >= 10)
break;
printf("time out ---------------\n");
continue;
}
if (FD_ISSET(sock, &readfds))
{
if ((rec_len = recvfrom(sock, m_serverTime, 48, 0, (struct sockaddr *)&server_addr, &server_len)) < 0) {
perror("\n\n recv error\n\n");
continue;
// return;
}
#if 0
for (i = 0; i<13; i++) {
printf("i = %d m_serverTime: %d\n", i,m_serverTime[i]);
tmit2 = ntohl((time_t)m_serverTime[i]);
tmit2 -= 2208988800U;
printf("i = %d %d Time: %s \n", i, tmit2, ctime(&tmit2));
}
#endif
tmit = ntohl((time_t)m_serverTime[10]);
tmit -= 2208988800U;
printf("Time: %s\n", ctime(&tmit));
tp = localtime(&tmit);
printf("%d/%d/%d\n", tp->tm_mon + 1, tp->tm_mday, tp->tm_year + 1900);
printf("%d:%d:%d\n", tp->tm_hour, tp->tm_min, tp->tm_sec);
return 0;
}
}
return 0;
}