c/c++为什么运行时本地时间改不了

zcfhero 2009-05-30 01:22:51
// TimeClient.cpp : Defines the entry point for the console application.
//
//条件 1 wsock32.lib
#include "stdafx.h"
#include "winsock.h" //条件2
#include<math.h>
#include<stdlib.h>
#define MAXLINE 54
#define STARTADDR "192.43.244.19"
#define MY_PORT 13

int main(int argc, char* argv[])
{ SYSTEMTIME cpime;
SOCKET sockfd,n;
char recvline[MAXLINE+1];
struct sockaddr_in servaddr;
char year[10];
char month[10];
char day[10];
char hour[10];
char minute[10];
char second[10];
int i=0;
int y;
char s1[10]={"Jan"},s2[10]={"Feb"},s3[10]={"Mar"},s4[10]={"Apr"},s5[10]={"May"},s6[10]={"Jun"},s7[10]={"Jul"};
char s8[10]={"Aug"},s9[10]={"Sep"},s10[10]={"Oct"},s11[10]={"Nov"},s12[10]={"Dec"};
//******************************** 条件3
WSADATA wsd;
if(WSAStartup(MAKEWORD(2,2),&wsd)!=0)
{
printf("wsastartup failed \n");
return -1;
}
//**********************************

if((sockfd = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))<0)
{
printf("socket creat erro!\n");
return 0;
}
//*************
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(2013);
servaddr.sin_addr.s_addr = inet_addr(STARTADDR);
//*****************
if(connect(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr))<0)
{
printf("connect erro\n");
return 1;
}
//********************
printf("now is read for recving.......\n");
while((n=recv(sockfd,recvline,MAXLINE,0))>0)
{
//recvline[n]=0;
// strcmpy

for( i=4;i<7;i++)
{
month[i-4]=recvline[i];
month[3]='\0';
}
if(strcmp(month,s1)==0) y=1;
if(strcmp(month,s2)==0) y=2;
if(strcmp(month,s3)==0) y=3;
if(strcmp(month,s4)==0) y=4;
if(strcmp(month,s5)==0) y=5;
if(strcmp(month,s6)==0) y=6;
if(strcmp(month,s7)==0) y=7;
if(strcmp(month,s8)==0) y=8;
if(strcmp(month,s9)==0) y=9;
if(strcmp(month,s10)==0) y=10;
if(strcmp(month,s11)==0) y=11;
if(strcmp(month,s12)==0) y=12;
printf("%d\n",y);
printf("%s\n",month);

for( i=8;i<10;i++)
{day[i-8]=recvline[i];
day[2]='\0';
}
printf("%s\n",day);

for( i=11;i<13;i++)
{hour[i-11]=recvline[i];
hour[2]='\0';
}
printf("%s\n",hour);

for( i=14;i<16;i++)
{minute[i-14]=recvline[i];
minute[2]='\0';
}
printf("%s\n",minute);

for( i=17;i<19;i++)
{second[i-17]=recvline[i];
second[2]='\0';
}
printf("%s\n",second);

for( i=20;i<24;i++)
{year[i-20]=recvline[i];
year[4]='\0';
}
printf("%s\n",year);
printf("%.24s \n",recvline);
//根据服务器发过来的时间数据设置本机时间

cpime.wYear = atoi(year);
cpime.wMonth = y;
cpime.wDay = atoi(day);
cpime.wHour = atoi(hour);
cpime.wMinute = atoi(minute);
cpime.wSecond = atoi(second);
SetLocalTime(&cpime);

if(recvline[n-1]=='\n'||recvline[n-2]=='\n')
{

closesocket(sockfd);
break;

}

}

return 0;
}

...全文
85 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
fldx 2009-06-17
  • 打赏
  • 举报
回复
你确定你那边有权限改Windows的时间,在公司我们连时间都没的权限改的。
myhder 2009-05-30
  • 打赏
  • 举报
回复
GetLastError
Treazy 2009-05-30
  • 打赏
  • 举报
回复
SetLocalTime返回值对吗
是否成功设置下去了

如果没有,call GetLastError.
goodname 2009-05-30
  • 打赏
  • 举报
回复
(1)
给出cpime结构的所有参数的值,贴出来看看是否有非法的。
(2)
这样看看错误码是多少
SetLocalTime(&cpime);
printf("err=%d\n",GetLastError());


3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧