使用套接字发送文件:需要1秒睡眠或纳秒睡眠

时间:2015-01-12 14:47:03

标签: c file sockets networking

我用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);

0 个答案:

没有答案