7.2服务器代码
#include
#include
getm(char buf[],char result[][10][50]) //change format {
char *ip=NULL,*op=NULL,*temp=NULL,*p=NULL,*tmp=NULL; int i=0,j=0,n=0;
temp=(char *)malloc(strlen(buf)); strcpy(temp,buf); p=temp;
strtok_r(temp,\
while((tmp=strtok_r(NULL,\ {
p=tmp;
while((tmp=strtok_r(p,\ {
strcpy(result[i][j],tmp); p=NULL; j++; } i++; j=0; }
free(temp); }
int opdb(char *cmd,char *p,int flag) //operate database {
MYSQL mysql;
MYSQL_RES *result; MYSQL_ROW row; int i,j,n=0; char buf[256];
if(mysql_init(&mysql)==NULL) {
printf(\ return -1; }
23
printf(\
if(!mysql_real_connect(&mysql,\ {
printf(\ mysql_close(&mysql); return -1; }
printf(\ printf(\
if(mysql_query(&mysql,cmd)!=0) {
printf(\ mysql_close(&mysql); return -1; }
if(flag==1) {
printf(\
if((result=mysql_store_result(&mysql))==NULL) {
mysql_free_result(result); mysql_close(&mysql); return -1; }
n=mysql_num_rows(result); } i=0; j=0;
if(p!=NULL) {
bzero(buf,sizeof(buf));
while((row=mysql_fetch_row(result))) {
strcat(buf,\ strcat(buf,row[0]);
for(i=1;i strcat(buf,\ strcat(buf,row[i]); } } sprintf(p,\ } if(flag==1) { printf(\ 24 mysql_free_result(result); } mysql_close(&mysql); printf(\ printf(\ return n; } checkstat(char id[]) { char cmd1[128],cmd2[128],cmd[128],buf[10]; sprintf(cmd1,\ to_days(now())-to_days(b_date)>30&&r_id=\\\ sprintf(cmd2,\ if((opdb(cmd1,NULL,1)==0)&&(opdb(cmd2,NULL,1)<4)) { sprintf(cmd,\ opdb(cmd,NULL,0); } else { sprintf(cmd,\ opdb(cmd,NULL,0); } printf(\} main(int argc, char **argv ) { struct sockaddr_in sin; struct servent *sp; int s,ns,pid; char buf[1024]; char *service; if(argc!=1) service=argv[1]; else { fprintf(stderr,\ fprintf(stderr,\ fprintf(stderr,\ exit(-1); } if((sp=getservbyname(service,\ fprintf(stderr,\ exit(-5); } if((s=socket(AF_INET,SOCK_STREAM,0))==-1){ fprintf(stderr,\ 25 exit(-6); } bzero(&sin,sizeof(sin)); sin.sin_port=sp->s_port; if(bind(s,(struct sockaddr *)&sin,sizeof(sin))==-1){ fprintf(stderr,\ close(s); exit(-6); } if(listen(s,5)==-1){ fprintf(stderr,\ close(s); exit(-6); } while(1){ fprintf(stderr,\ Now wait connect ...\\n\ if((ns=accept(s,0,0))==-1) { // wait a connection */ fprintf(stderr,\ continue; } if((pid=fork())==-1){ // conneted, and then create child proc fprintf(stderr,\ close(s); exit(-1); } if(pid!=0){ //parent proce, nothing to do, and to the next loop close(ns); wait(0); continue; } if(pid==0){ // entered child proccedure close(s); printf(\ MYSQL mysql; MYSQL_RES *result; MYSQL_ROW row; char cmd[128],buf[128]; char *info[3]; char name[50],writer[50]; char id[50],password[50]; char rec[10][10][50]; char *b_id,*r_id; int n; char tmp[10][10][50]; while(1) 26 { n=0; bzero(name,sizeof(name)); bzero(id,sizeof(id)); bzero(password,sizeof(password)); bzero(writer,sizeof(writer)); bzero(rec,sizeof(rec)); bzero(tmp,sizeof(tmp)); printf(\ if((n=read(ns,buf,sizeof(buf)))<=0) { printf(\ break; } buf[n]='\\0'; printf(\ if(strcmp(buf,\ { printf(\ break; } if(buf[1]==';') { switch(buf[0]) { case 'c': //update user info getm(buf,rec); checkstat(rec[0][0]); sprintf(cmd,\ n=opdb(cmd,buf,1); printf(\ if((write(ns,buf,sizeof(buf)))<=0) { printf(\ break; } break; case 'q': //Query getm(buf,rec); printf(\ sprintf(cmd,\like\\\ n=opdb(cmd,buf,1); printf(\ if((write(ns,buf,sizeof(buf)))<=0){ 27