 |
|
 |
|
Total : 270632
Today : 100
Yesterday : 188
|
|
|
 |
|
 |
6명이 RSS를 구독하고 있습니다.
|
 |
|
 |
|
|
|
|
rdate 명령과 흡사하게 구현하기
Programming/Network |
2007/05/08 12:19
|
|
|
| span class=postbody이것은 UNIX 명령어중에서 rdate 명령을 흉내내는 예제입니다.
br /
최대한 비슷하게 만들었습니다.
br /
br /
/spantable align=center border=0 cellpadding=3 cellspacing=1 width=90%tbodytr tdspan class=genmedb코드:/b/span/td /tr tr td class=code
br /
/*
br /
Copyright (c) 2002 Information Equipment co.,LTD.
br /
All Right Reserved.
br /
br /
Code by JaeHyuk Cho lt;minzkn@infoeq.co.krgt;
br /
br /
This example !!!
br /
nbsp; nbsp;- Simple is best.
br /
nbsp; nbsp;- Reference RFC 868nbsp; nbsp; nbsp; nbsp;-gt; See http://rfc.sunsite.dk
br /
*/
br /
br /
#if defined(WIN32)
br /
#include lt;windows.hgt;
br /
#else
br /
#include lt;stdio.hgt;
br /
#include lt;string.hgt;
br /
#include lt;sys/types.hgt;
br /
#include lt;unistd.hgt;
br /
#include lt;fcntl.hgt;
br /
#include lt;time.hgt;
br /
#include lt;sys/socket.hgt;
br /
#include lt;netinet/in.hgt;
br /
#include lt;netdb.hgt;
br /
#endif
br /
br /
#define DEF_RFC_868_CORRESPOND_VALUEnbsp; nbsp; (2208988800lu) /* 00:00:00 1 JAN 1970 GMT */
br /
#define DEF_RFC_868_TIMESERVER_TCP_PORT (37)
br /
#define DEF_RFC_868_TIMESERVER_UDP_PORT (37)
br /
br /
int main(int s_Argc, char *s_Argv[]);
br /
br /
static time_t MZ_GetRemoteTime(const char *s_TimeServer)
br /
{
br /
unsigned long s_Return = 0lu;nbsp; nbsp;
br /
int s_Socket;
br /
struct sockaddr_innbsp; s_SocketAddress_In;
br /
struct hostentnbsp; nbsp; nbsp;*s_HostEntry;
br /
s_HostEntry = gethostbyname(s_TimeServer);
br /
if(s_HostEntry)
br /
{
br /
nbsp; memset((void *)(amp;s_SocketAddress_In), 0, sizeof(s_SocketAddress_In));nbsp; nbsp;
br /
nbsp; s_SocketAddress_In.sin_family = AF_INET;
br /
nbsp; s_SocketAddress_In.sin_port = htons(DEF_RFC_868_TIMESERVER_TCP_PORT);
br /
nbsp; memcpy((void *)(amp;s_SocketAddress_In.sin_addr), (void *)(s_HostEntry-gt;h_addr), sizeof(s_SocketAddress_In.sin_addr));
br /
nbsp; s_Socket = socket(AF_INET, SOCK_STREAM, 0);
br /
nbsp; if(s_Socket gt;= 0)
br /
nbsp; {
br /
nbsp; nbsp;/* TODO: Tick save */nbsp; nbsp;nbsp;
br /
nbsp; nbsp;if(connect(s_Socket, (struct sockaddr *)amp;s_SocketAddress_In, sizeof(s_SocketAddress_In)) gt;= 0)
br /
nbsp; nbsp;{
br /
nbsp; nbsp; if(recv(s_Socket, amp;s_Return, sizeof(s_Return), 0) == sizeof(s_Return))
br /
nbsp; nbsp; {
br /
nbsp; nbsp; nbsp;s_Return = ntohl(s_Return) - DEF_RFC_868_CORRESPOND_VALUE; /* Time entry 00:00:00 1 JAN 1970 GMT */
br /
nbsp; nbsp; nbsp;/* TODO: s_Return += (Tick value / 2) */nbsp; nbsp;nbsp; nbsp;
br /
nbsp; nbsp; }
br /
nbsp; nbsp; else fprintf(stderr, Can not recv time_t from \%s\ !\n, s_TimeServer);nbsp; nbsp;
br /
nbsp; nbsp;}nbsp; nbsp;nbsp; nbsp;
br /
nbsp; nbsp;else fprintf(stderr, Can not connect to timeserver \%s\ !\n, s_TimeServer);
br /
#if defined(WIN32)
br /
nbsp; nbsp;closesocket(s_Socket);nbsp; nbsp;nbsp;
br /
#elsenbsp; nbsp;
br /
nbsp; nbsp;close(s_Socket);nbsp; nbsp;
br /
#endif
br /
nbsp; }
br /
nbsp; else fprintf(stderr, Can not open socket !\n);
br /
}
br /
else fprintf(stderr, Can not get host by name !\n);
br /
return((time_t)s_Return);
br /
}
br /
br /
int main(int s_Argc, char *s_Argv[])
br /
{
br /
char *s_TimeServer = time.bora.net; nbsp; nbsp;
br /
time_t s_RemoteTime;
br /
fprintf(stdout, rdate v0.0.1 - Code by JaeHyuk Cho lt;minzkn@infoeq.co.krgt;\n\n);
br /
if(s_Argc gt; 1)s_TimeServer = s_Argv[1];
br /
fprintf(stdout, Timeserver is %s\n, s_TimeServer);
br /
s_RemoteTime = MZ_GetRemoteTime(s_TimeServer);
br /
if(s_RemoteTime)
br /
{
br /
nbsp; fprintf(stdout, TIMEgt;gt; %s\n, ctime(amp;s_RemoteTime));nbsp; nbsp;nbsp;
br /
nbsp; /* TODO: Adjust clock delay */
br /
nbsp; /* stime(amp;s_RemoteTime); */ /* Save time */
br /
}
br /
else fprintf(stderr, Can not sync from \%s\ !\n, s_TimeServer);
br /
return(0);
br /
}
br /
br /
/* End of source */
/td/tr/tbody/table |
장인정신
2007/05/08 12:19
2007/05/08 12:19
|
|
| 이 글의 관련글(트랙백) 주소 :: http://blog.minzkn.com/trackback/273 |
|
|
|
|
 |
|
 |
|
 이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
|