📄 server.c
字号:
/* File: server.c */ #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #define datasize 2048 #include <time.h> struct tm * timeinfo; void refreshtime() { time_t nowtime; time( &nowtime ); timeinfo = localtime( &nowtime ); } struct logininfo { char name[20]; int inyear; int inmonth; int inday; int inhour; int inmin; int outyear; int outmonth; int outday; int outhour; int outmin; }; void intimebind(struct logininfo * login) { refreshtime(); login->inyear=timeinfo->tm_year+1900; login->inmonth=timeinfo->tm_mon; login->inday=timeinfo->tm_mday; login->inhour=timeinfo->tm_hour; login->inmin=timeinfo->tm_min; } void outtimebind(struct logininfo * login) { refreshtime(); login->outyear=timeinfo->tm_year+1900; login->outmonth=timeinfo->tm_mon; login->outday=timeinfo->tm_mday; login->outhour=timeinfo->tm_hour; login->outmin=timeinfo->tm_min; } int readFile() { FILE *fp; int i,count; char buf[2048]; fp=fopen("record","r"); if(fp==NULL) { printf("Request file not found!\n"); return 0; } else { char ch; printf("reading record.....\n"); ch=fgetc(fp); count=0; while(ch!=EOF) { buf[count++]=ch; ch=fgetc(fp); if(count==2048) { printf("record is full!"); printf("plesae clear record!\n"); break; } } buf[count]='\0'; } fclose(fp); printf("name\tyear\tmonth\tday\thour\tmin\t"); printf("year\tmonth\tday\thour\tmin\n"); printf("%s\n",buf); return 1; } void newrecord(struct logininfo * p) { FILE *fp; int i; if((fp=fopen("record","a+"))==NULL) { printf("Cannot open file"); } else { fprintf(fp,"%s\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n",p->name,p->inyear,p->inmonth,p->inday,p->inhour,p->inmin,p->outyear,p->outmonth,p->outday,p->outhour,p->outmin); printf("create one new record!\n"); fclose(fp); if(readFile()==0) { printf("read record failed!\n"); } } } int main(int argc, char **argv) { int fd; int address_len; struct sockaddr_in address; int listenfd; if(readFile()==0) { printf("read record failed!\n"); } fd = socket(AF_INET, SOCK_STREAM, 0); address.sin_family = AF_INET; address.sin_addr.s_addr = htonl(INADDR_ANY); address.sin_port = htons(1234); address_len = sizeof(address); bind(fd, (struct sockaddr *)&address, address_len); listenfd = listen(fd, 64); while(1) { struct sockaddr_in client_address; int len; int client_sockfd; char *data = "client end!\n"; char data2[datasize]; pid_t pid; printf("waiting...\n"); fflush(stdout); len = sizeof(client_address); client_sockfd = accept(fd, (struct sockaddr *)&client_address, &len); if( (pid = fork()) == 0){ printf("%d\n",client_sockfd); close(listenfd); int i; struct logininfo login; intimebind(&login); bzero((void *)data2, datasize); read(client_sockfd,login.name,20); for(i=0;i<3;i++) { read(client_sockfd,data2,datasize); printf("server read line:%s\n", data2); } send(client_sockfd,data,strlen(data),0); printf("server send line:%s\n", data); close(client_sockfd); outtimebind(&login); printf("%s\t %d\t %d\t %d\t %d\t %d\t %d\t %d \t%d \t%d\t %d\n",login.name,login.inyear,login.inmonth,login.inday,login.inhour,login.inmin,login.outyear,login.outmonth,login.outday,login.outhour,login.outmin); newrecord(&login); exit(0); } close(client_sockfd); } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -