客户端:client.c -- 检测目录是否为空,当有文件时把文件名发给server端
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#include <dirent.h>
#include <time.h>
#define HISPORT 10010
struct packet {
char data[1024000];
};
int send_to_169(struct packet pkt) {
int sd,ret;
struct sockaddr_in his_end;
sd=socket(PF_INET,SOCK_STREAM,0);
if(sd==-1) {
fprintf(stderr,"socket error.\n");
return -1;
}
his_end.sin_family=AF_INET;
his_end.sin_port=htons(HISPORT);
his_end.sin_addr.s_addr=inet_addr("10.199.75.169");
ret=connect(sd,(struct sockaddr *)&his_end,sizeof(his_end));
if(ret==-1) {
perror("connect()");
return -1;
}
ret=write(sd,&pkt,strlen(pkt.data));
if(ret==-1) {
fprintf(stderr,"write() error.\n");
return -1;
}
printf("client write %d bytes.\n",ret);
ret=close(sd);
if(ret==-1) {
fprintf(stderr,"close(sd) error.\n");
return -1;
}
return 0;
}
int main(void) {
int ret,mark;
struct packet pkt;
int i;
char *file_path[2]={"/video2/ftpdata/uploads","/video2/ftpdata/downloads"};
DIR *dp;
struct dirent *dir;
time_t timep;
struct tm *tp;
char nowtime[128];
timep=time(NULL);
tp=localtime(&timep);
sprintf(nowtime,"%d-%02d-%02d-%02d-%02d-%02d",1900+tp->tm_year,(1+tp->tm_mon),tp->tm_mday,tp->tm_hour,tp->tm_min,tp->tm_sec);
//start---
for(i=0;i<2;i++) {
dp=opendir(file_path[i]);
if(dp==NULL) {
fprintf(stderr,"opendir() error.\n");
exit(-1);
}
mark=0;
while((dir=readdir(dp))!=NULL) {
if(dir->d_type==DT_REG)
if(!mark++) {
strcat(pkt.data,file_path[i]);
strcat(pkt.data,"\n");
strcat(pkt.data,dir->d_name);
strcat(pkt.data,"\n");
} else {
strcat(pkt.data,dir->d_name);
strcat(pkt.data,"\n");
}
}
ret=closedir(dp);
if(ret==-1) {
fprintf(stderr,"closedir() error.\n");
exit(-1);
}
}
//end---
// printf("mark=%d,%s\n",mark,pkt.data);
printf("%s\n",nowtime);
printf("%s",pkt.data);
printf("mark=%d\n",mark);
if(mark) {
ret=send_to_169(pkt);
if(ret==-1) {
fprintf(stderr,"send_to_169() error.\n\n");
exit(-1);
}
}
printf("\n\n");
exit(0);
}
服务端:server.c -- 接收client端发来的信息,写到zipfile文件中,再调用my_mail.sh 脚本发邮件
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <time.h>
#define MYPORT 10010
#define MYFILE "/home/uniadmin/mail/check_133_134_upload_zip_file/zipfile"
#define LOGFILE "/home/uniadmin/mail/check_133_134_upload_zip_file/logfile.log"
struct packet {
char data[1024];
};
int main(void) {
FILE *fp,*fp_log;
int sd,newsd,ret;
struct sockaddr_in my_end,his_end;
int his_end_len;
struct packet pkt;
time_t timep;
struct tm *tp;
char nowtime[128];
pid_t pid;
int fd;
pid=fork();
if(pid==-1) {
perror("fork()");
exit(-1);
}
if(pid!=0) {
exit(0);
}
fd=open("/dev/null",O_RDONLY);
if(fd==-1) {
perror("open()");
} else {
close(STDIN_FILENO);
dup(fd);
close(fd);
}
fd=open("/dev/null",O_WRONLY);
if(fd==-1) {
perror("open()");
} else {
close(STDOUT_FILENO);
dup(fd);
close(STDERR_FILENO);
dup(fd);
}
setsid();
chdir("/");
sd=socket(PF_INET,SOCK_STREAM,0);
if(sd==-1) {
fprintf(stderr,"socket error.\n");
// fprintf(fp_log,"%s\n","socket error.");
exit(-1);
}
my_end.sin_family=AF_INET;
my_end.sin_port=htons(MYPORT);
my_end.sin_addr.s_addr=inet_addr("0.0.0.0");
// my_end.sin_addr.s_add=INADDR_ANY;
ret=bind(sd,(struct sockaddr *)&my_end,sizeof(my_end));
if(sd==-1) {
fprintf(stderr,"socket error.\n");
exit(-1);
}
ret=listen(sd,5);
if(ret==-1) {
fprintf(stderr,"listen error.\n");
exit(-1);
}
his_end_len=sizeof(his_end);
while(1) {
newsd=accept(sd,(struct sockaddr *)&his_end,&his_end_len);
if(newsd==-1) {
perror("accept()");
exit(-1);
}
ret=read(newsd,&pkt,sizeof(pkt));
if(ret==-1) {
fprintf(stderr,"read error.\n");
exit(-1);
}
(pkt.data)[ret]='\0';
// printf("server read %d bytes.\n%s",ret,pkt.data);
fp=fopen(MYFILE,"w");
if(fp==NULL) {
fprintf(stderr,"fopen() error.\n");
exit(-1);
}
ret=fprintf(fp,"%s",pkt.data);
if(ret==-1) {
fprintf(stderr,"fprintf() error.\n");
exit(-1);
}
ret=fclose(fp);
if(ret==EOF) {
fprintf(stderr,"fclose() error.\n");
exit(-1);
}
system("/home/uniadmin/mail/check_133_134_upload_zip_file/zip_file_check.sh");
// start log file
fp_log=fopen(LOGFILE,"a+");
if(fp_log==NULL) {
fprintf(stderr,"fopen() error.\n");
exit(-1);
}
timep=time(NULL);
tp=localtime(&timep);
sprintf(nowtime,"%d-%02d-%02d-%02d-%02d-%02d",1900+tp->tm_year,(1+tp->tm_mon),tp->tm_mday,tp->tm_hour,tp->tm_min,tp->tm_sec);
fprintf(fp_log,"%s\n",nowtime);
fprintf(fp_log,"%s\n",pkt.data);
fprintf(fp_log,"%s\n\n\n","Ok!! mail send sucess...");
fclose(fp_log);
// end log file
close(newsd);
}
close(sd);
exit(0);
}
服务端:my_mail.sh -- server调用该脚本发送邮件提醒
#!/bin/sh DATE=`date +%Y-%m-%d-%H-%M-%S` MY_PATH=/home/uniadmin/mail/check_133_134_upload_zip_file FILE=zipfile NEW_FILE=$FILE-$DATE # my mail my_mail() { if [ -e $MY_PATH/$FILE ] ; then /bin/mv $MY_PATH/$FILE $MY_PATH/$NEW_FILE # LINE=`/bin/cat $MY_PATH/$NEW_FILE | /usr/bin/wc -l` NUM=$((`sed -n '1p' $MY_PATH/$NEW_FILE | /bin/sed 's/[^;]*//g' | /usr/bin/wc -c`-1)) #echo `awk -F '' '{for(i=1;i<=NF;i++) if($i==";") a++} END{print a}' zipfile-2011-10-25-09-54-49` if grep 'zz-aq-4a-3' $MY_PATH/$NEW_FILE > /dev/null ; then /bin/mail -s '4a-3 oracle log err...' -b chenhb55@chinaunicom.cn -c hq-yangqq@chinaunicom.cn send2@m165.com < $MY_PATH/$NEW_FILE elif grep 'zz-aq-4a-4' $MY_PATH/$NEW_FILE > /dev/null ; then /bin/mail -s '4a-4 oracle log err...' -b chenhb55@chinaunicom.cn -c hq-yangqq@chinaunicom.cn send2@m165.com < $MY_PATH/$NEW_FILE elif grep hq-sunzhaobin $MY_PATH/$NEW_FILE > /dev/null ; then MAIL_ADDR1=`/bin/awk -F';' '{print $1}' $MY_PATH/$NEW_FILE` MAIL_ADDR2=`/bin/awk -F';' '{print $2}' $MY_PATH/$NEW_FILE` SUBJECT=`/bin/awk -F',' '{print $2}' $MY_PATH/$NEW_FILE` MAIL_CONTENT=`/bin/awk -F";" '{print $3}' $MY_PATH/$NEW_FILE` echo $MAIL_CONTENT | /bin/mail -s "$SUBJECT" -b send2@m165.com -c $MAIL_ADDR1 $MAIL_ADDR2 elif grep GSM $MY_PATH/$NEW_FILE > /dev/null ; then MAIL_ADDR1=`/bin/awk -F';' '{print $1}' $MY_PATH/$NEW_FILE` MAIL_ADDR2=`/bin/awk -F';' '{print $2}' $MY_PATH/$NEW_FILE` SUBJECT=`/bin/awk -F',' '{print $2}' $MY_PATH/$NEW_FILE` MAIL_CONTENT=`/bin/awk -F";" '{print $3}' $MY_PATH/$NEW_FILE` echo $MAIL_CONTENT | /bin/mail -s "$SUBJECT" $MAIL_ADDR2 # elif [ $NUM -eq 2 ] && [ $LINE -eq 1 ] ; then elif [ $NUM -eq 2 ] ; then MAIL_ADDR1=`/bin/awk -F';' '{if(NR==1) print $1}' $MY_PATH/$NEW_FILE` MAIL_ADDR2=`/bin/awk -F';' '{if(NR==1) print $2}' $MY_PATH/$NEW_FILE` SUBJECT=`/bin/awk -F';' '{if(NR==1) print $3}' $MY_PATH/$NEW_FILE` # MAIL_CONTENT=`/bin/awk -F";" '{print $3}' $MY_PATH/$NEW_FILE` ## MAIL_CONTENT=`/bin/awk '{if(NR>=2) print $0}' $MY_PATH/$NEW_FILE` /bin/awk '{if(NR>=2) print $0}' $MY_PATH/$NEW_FILE > /home/uniadmin/mail/check_133_134_upload_zip_file/tmp_file /bin/mail -s "$SUBJECT" -b send2@m165.com -c $MAIL_ADDR2 $MAIL_ADDR1 < /home/uniadmin/mail/check_133_134_upload_zip_file/tmp_file ## /bin/cat /home/uniadmin/mail/check_133_134_upload_zip_file/tmp_file | /bin/mail -s "$SUBJECT" -c send2@m165.com -c $MAIL_ADDR2 $MAIL_ADDR1 ## echo $MAIL_CONTENT | /bin/mail -s "$SUBJECT" -c send2@m165.com $MAIL_ADDR1 elif grep '^.\+@.\+\..\+;' $MY_PATH/$NEW_FILE > /dev/null && [ $LINE -eq 1 ] ; then MAIL_ADDR=`/bin/awk -F';' '{print $1}' $MY_PATH/$NEW_FILE` MAIL_CONTENT=`/bin/awk -F"$MAIL_ADDR;" '{print $2}' $MY_PATH/$NEW_FILE` echo $MAIL_CONTENT | /bin/mail -s 'my mail ...' $MAIL_ADDR else /bin/mail -s 'Warn!!133 134 zip file...' -b chenhb55@chinaunicom.cn -c hq-yangqq@chinaunicom.cn send2@m165.com < $MY_PATH/$NEW_FILE fi fi } # 30 day ago delete file delete_file() { find $MY_PATH -name 'zipfile*' -mtime +3 -exec rm {} \; } # execute my_mail delete_file exit 0