我用C编写客户端/服务器应用程序,我发现了一个令我困惑的麻烦。
如果我发送单个文件一切正常,但是当我尝试发送当前工作目录客户端块中的每个文件时(在我认为的读取系统调用上)。 我试过写一个sleep(1)指令,但它确实有效。
以下是发送所有文件的函数代码。
while((p =readdir(d))){
/* We DO NOT want to transfer these files */
if(!strcmp(p->d_name,".") || !strcmp(p->d_name,"..") || !strcmp(p->d_name,".DS_Store") || !strcmp(p->d_name,"clientS") || !strcmp(p->d_name,"clientS.c"))
continue;
if(stat(p->d_name,&file_stat) < 0){
perror("Stat error");
}
if(S_ISREG(file_stat.st_mode)){
//printf("sending : %s\n ",p->d_name);
send_file(p->d_name,Socket_d);
}
sleep(1);
}
我正在使用127.0.0.1 IP地址(localhost)进行测试
send_file功能代码:
byte_left = file_stat.st_size;
/* while there are bytes to send loop */
while(byte_left > 0){
memset(sendbuf,0,sizeof(sendbuf));
/*read data from file*/
nread = fread(sendbuf,1,sizeof(sendbuf),filepointer);
sendbuf[nread] = '\0';
if(write(sock_fd,sendbuf,sizeof(sendbuf)) < 0){
perror("Writing error");
return -1;
}
byte_left -= nread;
}
close(fd);