时间通过网络连接时间服务器设置本地时间
2013-03-18 15:45
531 查看
1、简单来说就是自己编写socket的client连接时间服务器、通过recv就会收到一个秒数..代码如下
// test.cpp.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <stdio.h> #include <stdlib.h> #include <iostream> #include <time.h> #ifdef _WIN32 #include <Windows.h> #include <dos.h> #include <WinSock.h> #pragma comment(lib,"ws2_32.lib") #else #include <netinet/in.h> #include <arpa/inet.h> #include <sys/socket.h> #include <sys/types.h> #include <sys/time.h> #include <unistd.h> #endif using namespace std; int GetInternetTime(long long &ulTime ) //获取从1900年到现在的秒数 { int ret = -1; int Err_i = 0; BEGIN: #ifdef _WIN32 WSADATA Ws; if (WSAStartup(MAKEWORD(2,2), &Ws) != 0 ) { cout<<"Init Windows Socket Failed::"<<GetLastError()<<endl; ret = -1; } SOCKET s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (s == INVALID_SOCKET) { std::cout<<"create socket error"<<std::endl; ret = -2; } sockaddr_in servAddr; memset(&servAddr,0,sizeof(sockaddr_in)); servAddr.sin_family = AF_INET; servAddr.sin_port = htons(37); servAddr.sin_addr.S_un.S_addr = inet_addr("64.236.96.53"); if (SOCKET_ERROR == connect(s, (sockaddr *)&servAddr, sizeof(servAddr))) { std::cout<<"connect socket error"<<std::endl; ret = -3; } int nRecv = recv(s, (char *)&ulTime, sizeof(ulTime), 0); ulTime = ntohl(ulTime); closesocket(s); #else struct sockaddr_in s_add,c_add; int cfd = socket(AF_INET, SOCK_STREAM, 0); if(int == cfd) { printf("socket fail ! \r\n"); ret = -1; } memset(&s_add,0,sizeof(struct sockaddr_in)); s_add.sin_family=AF_INET; s_add.sin_addr.s_addr= inet_addr("64.236.96.53"); s_add.sin_port=htons(37); if(int == connect(cfd,(struct sockaddr *)(&s_add), sizeof(struct sockaddr))) { printf("connect fail !\r\n"); ret = -1; } if(int == read(cfd,(char *)&ulTime,1024)) { printf("read data fail !\r\n"); ret = -3; } ulTime = ntohl(ulTime); close(cfd); #endif if(ulTime > 0) ret = 0; else if(Err_i++ < 3) //连接失败、以及获取时间失败重新连接最多失败三次 goto BEGIN; return ret; } int main() { long long a = 0; if(!GetInternetTime(a)) cout<<a<<endl; /*获取1900年到现在的秒数、转为本地时间。 *注意:因为电脑上的时间基本都是从1970年开始算起的、所有转换之后应该减掉70年*/ struct tm *t; /*转为国际时间*/ t = gmtime(&a); printf("%04d-%02d-%02d %02d:%02d:%02d\n" , t->tm_year +1900 - 70 , t->tm_mon + 1 , t->tm_mday , t->tm_hour //国际时间 , t->tm_min , t->tm_sec); /*转为本地时间*/ t = localtime(&a); printf("%04d-%02d-%02d %02d:%02d:%02d\n" , t->tm_year +1900 - 70 , t->tm_mon + 1 , t->tm_mday , t->tm_hour //本地时区的时间 , t->tm_min , t->tm_sec); getchar(); return 0; }
相关文章推荐
- Java基础网络---2-----连接到服务器(设置链接超时时间)
- Java通过Ntp服务器获取网络时间修改本地服务器时间
- 通过Java HTTP连接将网络图片下载到本地
- Oracle 11G RAC 本地时间和通过listener连接时间不相同的问题
- 同步复制数据库,当网络问题,服务器间断开连接,复制中断后,自动继续复制的设置
- 通过网络时间服务器获取日期和时间
- 服务器数据库相关的网络连接设置
- 命令行设置本地网络连接
- android开发真机通过局域网连接本地服务器测试的问题?
- Windows7或Vista系统给本地连接设置DNS服务器图文教程
- 一台普通电脑通过设置连接到公司网络
- Oracle 11g RAC 本地时间和通过listener连接时间不相同的问题
- Ubuntu通过命令行设置无线网络连接
- 关于连接远程服务器本地Net Configuration Assistant设置
- JVM通过代理服务器连接网络的参数设置
- 在建立与服务器的连接时出错。在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败。 (provider: SQL 网络接口, error: 26 - 定位指定的服务器/实例时出错)
- 通过Java HTTP连接将网络图片下载到本地
- 解决: 关于配置局域网内通过一台WEB服务器连接到域服务器进行身份验证的IP设置
- 无线网卡与本地连接不能同时使用&一机多网络的优先级设置