📄 newclient.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 + -