멀티 쓰레드에서 파일전송을 하는데 전송이 제대로 안됩니다

글쓴이: 익명 사용자 / 작성시간: 수, 2018/06/20 - 6:36오후
파일을 전송하는쪽에서 먼저 종료해버려서 버퍼에 데이터가 남아있는상태로 파일을 받는쪽에서 입력을 못받는데 어떻게 하는 방법 없을까요 ??
filesize = 0; file = fopen("test.jpg","wb"); recv(sd,&filesize,sizeof(filesize),0); // 파일의 사이즈를 받음 bufsize = MAXLINE; // 기본 버퍼 설정 while(filesize != 0){ // 받은 버퍼의 총사이즈가 파일의 사이즈와 같을때 까지 loop if(filesize < MAXLINE) // 남은 파일 사이즈가 버퍼보다 적을때 bufsize = filesize; nbyte = recv(sd,buf,bufsize,0); filesize = filesize - nbyte; fwrite(buf,sizeof(char),nbyte,file); nbyte=0; } // end of while fclose(file);
fsize = 0, nsize = 0, fpsize = 0; file = fopen("test.jpg","rb"); fseek(file,0,SEEK_END); fsize = ftell(file); fseek(file,0,SEEK_SET); send(sd,&fsize,sizeof(fsize),0); // 파일의 사이즈를 보냄 while(nsize != fsize){ // 파일을 보냄 fpsize = fread(buf,1,MAXLINE,file); nsize = nsize + fpsize; send(sd,buf,fpsize,0); } // end of while fclose(file);
추가로 파일 사이즈를 보냈는데 자꾸 이상한 숫자가 뜨는건 왜그런가요 ?
Forums:
...
send는 버퍼가 모자라면 데이터를 일부만 보낼 수도 있습니다. send의 리턴값을 확인해서 실제로 몇 바이트를 전송했는지 확인해야 합니다.
댓글 달기