最近我用C语言写了一个连接授时服务器获取网络时间的小程序,但是运行的时候会显示下面提示。
“由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败”
已经换了好几个授时服务器了,但都是这个问题,而且我也都提前ping过了,都通的。
程序本身应该没问题,我试着连过网易的SMTP服务器,能连上。
请问 各位网络编程高手,是否有这方面的经验,告诉我一个好的解决方法啊,如果这个问题没有解决,那我就无法往下继续学习了啊,谢谢了。
“由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败”
已经换了好几个授时服务器了,但都是这个问题,而且我也都提前ping过了,都通的。
程序本身应该没问题,我试着连过网易的SMTP服务器,能连上。
请问 各位网络编程高手,是否有这方面的经验,告诉我一个好的解决方法啊,如果这个问题没有解决,那我就无法往下继续学习了啊,谢谢了。
utcnist.colorado.edu(IP:128.138.140.44)
stdtime.gov.hk(IP:210.0.235.14)1.RFC-867协议:
同时支持TCP和UDP,使用13号端口。
连接成功后服务器会立刻发送给你如下的字符串:
04 MAR 2011 09:13:55 HKT
不过格式不固定,每个服务器格式都不一样。2.RFC-868协议:
同时支持TCP和UDP,使用37号端口。
连接成功后服务器会立刻发送给你一个unsigned long大小的整数,
该值代表自1900年1月1后的通用时间协调 (UTC) 秒数。
你可以如下调用:
unsigned long ulTime;//接收用
//..接收代码
ulTime = ntohl(ulTime);//转为本机字节序
SYSTEMTIME st;
TCHAR szBuffer[128];
GetSystemTime(ulTime,&st);//自定义函数见下面
ParseSystemTime(&st,szBuffer,sizeof(szBuffer)/sizeof(szBuffer[0]));//自定义函数见下面
cout<<'\n'<<szBuffer<<'\n';//显示时间
//自定义函数
#define HIGHTIME 21968699
#define LOWTIME 4259332096
BOOL GetSystemTime(unsigned long ulTime, SYSTEMTIME * st)//ulTime表示1900.1.1至今的秒数(UTC-based)
{
FILETIME LocalFileTime;
UINT64 uiCurTime, uiBaseTime, uiResult;
uiBaseTime = ((UINT64) HIGHTIME << 32) + LOWTIME;
uiCurTime = (UINT64)ulTime * (UINT64)10000000;
uiResult = uiBaseTime + uiCurTime;
FileTimeToLocalFileTime((const FILETIME *)&uiResult,&LocalFileTime);
return FileTimeToSystemTime(&LocalFileTime, st);
}
void ParseSystemTime(const SYSTEMTIME * st, LPTSTR szBuffer, size_t len)
{
static const TCHAR szWeek[7][10]={"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
_sntprintf(szBuffer,len,TEXT("%d-%02d-%02d %02d:%02d:%02d.%03d %s"),
st->wYear,st->wMonth,st->wDay,
st->wHour,st->wMinute,st->wSecond,st->wMilliseconds,szWeek[st->wDayOfWeek]);
if(len)
szBuffer[len-1] = '\0';
}
3.其他几个时间协议略..
参考链接:
http://joyssue.blog.51cto.com/95711/316125