⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 newclient.c

📁 时间同步客户端,基于SOCKET编程,服务端运行与WINDOWS下.前面已上传.
💻 C
字号:
#include <sys/types.h>#include <sys/socket.h>#include <stdio.h>#include <stdlib.h>#include <netinet/in.h>#include <arpa/inet.h>#include <unistd.h>#include <sys/uio.h>#include <errno.h>#include <string.h>#include <time.h>#define  RUN_PATH   "/usr/toptv/bin"#define LOG_TYPE_ERROR	    -1#define LOG_TYPE_NORMAL	     0#define LOG_TYPE_WARRING     1#define  LOG_PATH   "/usr/toptv/log/silog"int  init_socket(char *ip,int port,char *err_msg,int msg_len);int main(){//char *ip = "192.168.0.75";int  port = 5060;int  sockfd = -1;char err_msg[255]; char snd_buf[1024]; int  send_len; int ret,i,j; fd_set fdr; time_t remote_time; time_t temp_time; int  time_str_len; struct timeval timeout; char netinputbuf[512]; struct tm  *gmt; char error_msg[255]; int sleeptime=0; char ip_str[255]; char * ip_1; int coount=0;  memset(error_msg,0,255);  memset(ip_str,0,255); init_daemon(RUN_PATH); ip_1 =  getinfofromfile("time_server=","\/etc\/toptv_timesvr.conf"); sprintf(ip_str,"%s",ip_1);  port=atoi(getinfofromfile("port=","\/etc\/toptv_timesvr.conf")); sleeptime=atoi(getinfofromfile("refreshtime=","\/etc\/toptv_timesvr.conf")); //printf("ip=%s  port=%d sleep=%d \n",ip_str,port,sleeptime); sprintf(error_msg,"开启参数 ip=%s  port=%d sleep=%d .",ip_str,port,sleeptime); writelog(LOG_PATH,LOG_TYPE_NORMAL,error_msg);    //return 0; memset(err_msg,0,255);sockfd = init_socket(ip_str,port,err_msg,255);    	        if(sockfd <0){    		       		//printf("SOCKET ERROR!\n");       		       		sprintf(error_msg," %s","SOCKET ERROR!");          writelog(LOG_PATH,LOG_TYPE_ERROR,error_msg);       		return -1;    	       }   //printf("SOCKET ok! sockfd=%d \n",sockfd);     sprintf(snd_buf,"%s","hhahhahhha");	       while(coount<(60*60*24/sleeptime)){              //if(coount)       send_len = strlen(snd_buf);	ret = send(sockfd,snd_buf,send_len,0);      if(ret < 0)	{	         //printf("send error! sockfd=%d \n",sockfd);	         close(sockfd);	        return -1;	} //printf("send ok! ret=%d \n",ret);  	timeout.tv_sec = 100;        timeout.tv_usec = 100;        FD_ZERO(&fdr);        FD_SET(sockfd, &fdr);	ret = select(sockfd+1, &fdr,NULL,NULL, &timeout); timeout.tv_sec = 100;        timeout.tv_usec = 100;        FD_ZERO(&fdr);        FD_SET(sockfd, &fdr);	ret = select(sockfd+1, &fdr,NULL,NULL, &timeout);	//printf("select ret = %d\n",ret); 	memset(netinputbuf,0,512);	if(ret<=0)	{	            close(sockfd);            return -1;    	}	ret = recv(sockfd,netinputbuf,10,0);	if(ret < 0)	{	    close(sockfd);	   //printf("接收错误 %s\n",strerror(errno));	   sprintf(error_msg," 接收错误 %s",strerror(errno));          writelog(LOG_PATH,LOG_TYPE_ERROR,error_msg);            return -1;      	} //printf("received	ok =%s \n",netinputbuf); time_str_len=strlen(netinputbuf);  //printf("%d long\n",time_str_len);  remote_time=0; temp_time=0; for(i=0;i<time_str_len;i++) {	 	temp_time=1; 	for(j=0;j<time_str_len-1-i;j++) 	{ 	temp_time*=10;   //printf("%ld !\n",temp_time);}  j=netinputbuf[i]-48;  remote_time+=temp_time*j;  //printf("%ld seconds !j=%d \n",remote_time,j); } //printf("%s",netinputbuf); //remote_time = atoi(netinputbuf[i]); //printf("remote server %s time UTC: %ld seconds !\n",ip_1,remote_time);  time( &temp_time ); //printf( "locale server    time UTC:%ld seconds !\n", temp_time ); temp_time=temp_time-remote_time; if(temp_time<-5 || temp_time>5) { 	char heretime[255]; 	char cmline[255]; 	memset(heretime,0,255);  memset(cmline,0,255);    sprintf(heretime,"%s",ctime( &remote_time ));    //printf("shouled set to %ld  = %s \n",remote_time,heretime);  sprintf(cmline,"date -s \'%s\'",heretime);  system(cmline);	      sprintf(error_msg," 设置时间为: %s",heretime);    writelog(LOG_PATH,LOG_TYPE_NORMAL,error_msg);   //printf( "UNIX time and date:%s", ctime( &remote_time ) );  //	gmt = gmtime( &remote_time );	//printf( "Coordinated universal time:%s", asctime( gmt ) );	 }else { //printf("shouled not set\n"); } sleep(sleeptime); coount+=sleeptime; //printf("coount=%d \n",coount);}close(sockfd);return 0;}int  init_socket(char *ip,int port,char *err_msg,int msg_len){    int sockfd;    int len;    struct sockaddr_in address;    int result;    char msg[1024];       memset(msg,0,512);    sockfd = socket(AF_INET, SOCK_STREAM, 0);    //printf("here pk!\n");    address.sin_family = AF_INET;    address.sin_addr.s_addr = inet_addr(ip);    address.sin_port = htons(port);    len = sizeof(address);       result = connect(sockfd, (struct sockaddr *)&address, len);        //printf("here ok 2!\n");         if(result < 0) {        sprintf(msg,"连接错误 %s",strerror(errno));                if(err_msg&&msg_len>strlen(msg));           sprintf(err_msg,"%s",msg);                    return -1;    }    return sockfd;    }const char * getinfofromfile(const char * inputstring,const char * filename){        FILE *f;        int linenumber=0;        int i=0;        int k=0;        char temmp[1024];        char string[1024];        char *result = NULL;        //memset(backstring,0,255);        memset(string,0,1024);        memset(temmp,0,1024);                        if((f=fopen(filename,"r"))==NULL)        {                printf("can't open %s !\n",filename);                return result;        }                fseek(f,0,SEEK_SET);                while(fgets(string,sizeof(string),f)){                sleep(0);                linenumber+=1;                if ( strstr(string,inputstring) != NULL)                {                        char * str2=NULL;                   int  j = 0;                   char number[255]="";                   int length = 0;                   length = strlen(inputstring);                   while (string[length]!= ';')                   {                        temmp[j] = string[length];                        j++;                        length++;                   }                   temmp[j] = '\0';                   if(j>0)                     result = temmp;                   break;                 }        }        sleep(0);                 fclose(f);                return result;}int writelog(char *logpath,int logtype,char *logmsg){	FILE *fp  = NULL;	char mytypemsg[256];	char mytimemsg[256];	time_t now;	char mylogmsg[1024];	char allptahlogfilename[1024];	struct tm *mytm;	int year = 0 ;	int mon = 0;	int day = 0;	now = time(&now);	sprintf(mytimemsg,asctime(localtime(&now)));	mytm = localtime(&now);	year = mytm->tm_year + 1900;	day  = mytm->tm_mday;	mon  = mytm->tm_mon + 1;	sprintf(allptahlogfilename,"%s/%04d%02d%02dtimekeeper.log",logpath,year,mon,day);	if(logtype < 0 )	sprintf(mytypemsg,"错误:");	else if(logtype > 0)	sprintf(mytypemsg,"警告:");	else	sprintf(mytypemsg,"正常:");	sprintf(mylogmsg,"%s%s %s\n",mytimemsg,mytypemsg,logmsg);	fp = fopen(allptahlogfilename,"a+");	if(!fp)	return -1;	fputs(mylogmsg,fp);	fclose(fp);	return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -