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

📄 client.c

📁 Time服务TCP客户机——服务器实现,linux下实现
💻 C
字号:
#define SA struct sockaddr
#include"time.h"
#include "curses.h"
#include "stdlib.h"
#include "stdio.h"
#include "errno.h"
#include "netdb.h"
#include "string.h"
#include "sys/time.h"
#include "sys/types.h"
#include "sys/socket.h"
#include "netinet/in.h"
#include "memory.h"
#include "stdarg.h"
#include "syslog.h"
#define	UNIXEPOCH	2208988800UL	/* UNIX epoch, in UCT secs	*/
#define	MSG		"what time is it?\n"
int daemon_proc;
static void err_doit(int errnoflag,int level,const char * fmt,va_list ap)
{
	int errno_save,n;
	char recvline[MAXLINE];
	errno_save = errno;
#ifdef HAVE_VSNPRINTF
	vsnprintf(recvline,sizeof(recvline),fmt,ap);
#else
	vsprintf(recvline,fmt,ap);
#endif
	n = strlen(recvline);
	if(errnoflag)
		snprintf(recvline + n,sizeof(recvline) -n,":%s",strerror(errno_save));
	strcat(recvline,"\n");
	if(daemon_proc){
		syslog(level,recvline);
	}else{
		fflush(stdout);
		fputs(recvline,stderr);
		fflush(stderr);
	}
	return;
}
err_sys(const char * fmt,...)
{
	va_list ap;
	va_start(ap,fmt);
	err_doit(1,LOG_ERR,fmt,ap);
	va_end(ap);
	exit(1);
}
err_quit(const char * fmt,...)
{
	va_list ap;
	va_start(ap,fmt);
	err_doit(0,LOG_ERR,fmt,ap);
	va_end(ap);
	exit(1);
}
/* Define bzero() as a macro if it's not in standard C library. */
#ifndef HAVE_BRZEO 
#define bzero(ptr,n) memset(ptr,0,n) 
#endif

int main(int argc,char * * argv)
{    
	int sockfd;
       time_t localtime;//本机时间
       time_t now;//服务端时间
	struct sockaddr_in servaddr;
	if(argc != 2)
		err_quit("usage:a.out<IPaggress>");
	if((sockfd = socket(AF_INET,SOCK_STREAM,0))<0)//创建套接字
		err_sys("socket error");
	bzero(&servaddr,sizeof(servaddr));//初始化套接字

	servaddr.sin_family = AF_INET;
       	servaddr.sin_port = htons(37);
	if(inet_pton(AF_INET,argv[1],&servaddr.sin_addr) <= 0)
		err_quit("inet_pton error for %s",argv[1]);
	if(connect(sockfd,(SA *)&servaddr,sizeof(servaddr)) < 0)//连接服务端

		err_sys("connect error");
       (void) write(sockfd, MSG, strlen(MSG));//向服务器发请求

       localtime=time(NULL);//本机时间
       read(sockfd, (char *)&now, sizeof(now));//接受回应
	now = ntohl((unsigned long)now);	/* put in host order	*/
	now -= UNIXEPOCH;		/* convert UCT to UNIX epoch	*/
       
	if(now  > localtime )		
	{
		printf("server time is long");
		dtime = now  - localtime ;
		printf("d%",dtime);
              printf("than local time");
	}
	else if(now  < localtime )
	{
		printf("local time is long");
		dtime = localtime  - now ;
		printf("d%",dtime);
              printf("s than server time");
	}
	else
		printf("equal\n");

}

⌨️ 快捷键说明

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