while(1){
        puts("서버가 연결요청을 기다림..");
        // 연결요청을 기다림 
        accp_sock = accept(listen_sock,
        (struct sockaddr *)&cliaddr, &addrlen);

        if(accp_sock < 0){
            perror("accept fail");
            exit(0);
        }

        puts("클라이언트가 연결됨..");

        inet_ntop(AF_INET, &cliaddr.sin_addr.s_addr, cli_ip, sizeof(cli_ip));
        printf("IP : %s ", cli_ip);
        printf("Port : %x \n", ntohs(cliaddr.sin_port));

        memset(filename,0,20);
//        bzero(filename, 20); 
        recv(accp_sock, filename, sizeof(filename), 0);
        printf("%s ", filename);

        // recv( accp_sock, &filesize, sizeof(filesize), 0 ); 
        read(accp_sock, &filesize, sizeof(filesize));
        printf("%d\n", filesize);

        strcat(filename, "_backup");
        fp = open(filename, O_WRONLY | O_CREAT | O_TRUNC);

        while(total != filesize){
            sread = recv( accp_sock, buf, 100, 0 );
            printf("file is receiving now.. ");
            total += sread;
            buf[sread] = 0;
            write(fp, buf, sread);
            memset(buf,0,sizeof(buf));
           // bzero(buf, sizeof(buf)); 
            printf("processing : %4.2f%%\n", total*100 / (float)filesize);
            usleep(1000);
        }
        printf( "file traslating is completed\n" );
        printf( "filesize : %d, received : %d \n", filesize, total );
        chmod(filename, S_IRUSR | S_IWUSR | S_IRGRP);

        close(fp);
        close(accp_sock);
    }


    close( listen_sock );
    return 0;
}


여기까지 서버고

void filetransfer(int sock){
    char filename[30];
    char buf[MAXLINE+1];
    int filenamesize, fp, filesize;
    int sread=0, total = 0;
    __fpurge(stdin);
    printf("전송할 파일의 이름을 입력하시오 : ");
    if (fgets(filename, sizeof(filename), stdin) == NULL)
        exit(0);

    filenamesize = strlen(filename);
    filename[filenamesize-1] = 0;

    if((fp = open(filename, O_RDONLY)) < 0 ){
        printf( "open failed\n" );
        exit(0);
    }

    send(sock, filename, sizeof(filename), 0);

    filesize = lseek(fp, 0, SEEK_END);
    send(sock, &filesize, sizeof(filesize), 0);
    lseek(fp, 0, SEEK_SET );

    while(total != filesize){
        sread = read(fp, buf, 100);
        printf("파일을 전송하고 있는중입니다.. ");
        total += sread;
        buf[sread] = 0;
        send(sock, buf, sread, 0);
        printf("processing :%4.2f%% \n", total*100 / (float)filesize);
        usleep(10000);
    }

    printf("전송이 완료되었습니다.\n");
    printf("크기 : %d, 완료율 : %d \n", filesize, total);
    close(sock);
    close(fp);
}


여기까지 클라이언트임

근데 파일을 전송시키면 10바이트가 증가되어서 보내지고

클라이언트는 processing이 100%까지 잘 뜨는데

서버부분에서 processing부분이 한 9%에서 무한루프가 걸림 왜 그런건지 알 수 있을까

소스 너무 길어서 서버 연결부분이랑은 잘라낸거임 연결은 잘 되니까

메일이나 뭐 알려주면 나머지 소스도 보내줄 수 있어