我通過引用here上的網頁在底部使用代碼ntp客戶端代碼。代碼接收時間信息,然後我想將時間信息存儲爲YYYYMMDDHHMM
,如201304211405
。代碼接收來自NTP服務器的時間信息,但是我很難找到如何將該信息傳遞給strftime
,我應該如何將接收到的時間信息傳遞給strftime
?從NTP服務器向strftime函數傳遞時間信息
下面是代碼
i=recv(s,buf,sizeof(buf),0);
tmit=ntohl((time_t)buf[10]); //# get transmit time
tmit-= 2208988800U;
printf("tmit=%d\n",tmit);
//#compare to system time
printf("Time is time: %s",ctime(&tmit));
char buffer[13];
struct tm * timeinfo;
timeinfo = ctime(&tmit);
strftime (buffer,13,"%04Y%02m%02d%02k%02M",timeinfo);
printf("new buffer:%s\n" ,buffer);
這裏的相關部分,我使用
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
void ntpdate();
int main() {
ntpdate();
return 0;
}
void ntpdate() {
char *hostname="79.99.6.190 2";
int portno=123; //NTP is port 123
int maxlen=1024; //check our buffers
int i; // misc var i
unsigned char msg[48]={010,0,0,0,0,0,0,0,0}; // the packet we send
unsigned long buf[maxlen]; // the buffer we get back
//struct in_addr ipaddr; //
struct protoent *proto; //
struct sockaddr_in server_addr;
int s; // socket
int tmit; // the time -- This is a time_t sort of
//use Socket;
proto=getprotobyname("udp");
s=socket(PF_INET, SOCK_DGRAM, proto->p_proto);
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family=AF_INET;
server_addr.sin_addr.s_addr = inet_addr(hostname);
server_addr.sin_port=htons(portno);
// send the data
i=sendto(s,msg,sizeof(msg),0,(struct sockaddr *)&server_addr,sizeof(server_addr));
/***************HERE WE START**************/
// get the data back
i=recv(s,buf,sizeof(buf),0);
tmit=ntohl((time_t)buf[10]); //# get transmit time
tmit-= 2208988800U;
printf("tmit=%d\n",tmit);
//#compare to system time
printf("Time is time: %s",ctime(&tmit));
char buffer[13];
struct tm * timeinfo;
timeinfo = ctime(&tmit);
strftime (buffer,13,"%04Y%02m%02d%02k%02M",timeinfo);
printf("new buffer:%s\n" ,buffer);
}
是您的代碼工作的替換線? – mohit 2013-04-21 18:30:06
它正在工作,但'strftime'是錯誤的,將錯誤的數據傳遞到'char緩衝區[13]' – sven 2013-04-21 18:33:36