파일 전송 프로그램 구현도중 알수 없는 무한루프가 발생합니다.
글쓴이: khm915 / 작성시간: 화, 2008/12/09 - 11:13오후
리눅스 TCP상에서 표준 입출력 함수를 이용(입력, 출력 분리)하여
파일을 전송하는 프로그램(클라이언트에서 서버로 파일전송)을 만들고 있습니다.
리눅스 시스템콜을 사용했을때에는 문제가 없던 소스 였는데 파일 send,recv 쪽을 표준 입출력 함수인 fread 와 fwrite 로 바꾸니
클라이언트에서는 파일을 다 전송했다고 출력되는데 서버에서는 무한루프에서 빠져나오지 못하고 있습니다.
파일 전송을 위해 사용한 방법은 fread의 반환값을 검사(제가 알기로는 읽은 파일길이를 반환)하여
그 값이 0보다 클때까지 파일을 전송하고, 서버쪽에서는 fread의 반환값을 검사하여 그 값이 0보다 크면
파일을 써주고 미리 정해진 버프 사이즈보다 받은 파일의 사이즈가 적을경우 무한루프를 종료하게 하였습니다.
고수님들의 지도 편달 부탁드립니다!!~
<서버>
while(1)
{
numread = fread(file_recv, 1, FILE_BUFSIZE, readFP); //file recv
printf("\nFile Recevice : %d Bytes \n", numread);
if(numread > 0) //반환값검사
{
fwrite(file_recv, 1, numread, fp); //recv data write
numtotal += numread; //read한 data byte 합계
printf("File Total Recevice : %d Bytes \n", numtotal);
}
else
{
printf("파일 전송 에러");
break;
}
//read한 data의 값이 file_buffsize 보다 작으면
//마지막 데이터로 간주 while문 중지
if(numread < FILE_BUFSIZE) break;
}<클라이언트>
while(1)
{ //file_buffsize 만큰 읽어 file_send 버퍼에 저장
numread = fread(file_send, 1, FILE_BUFSIZE, fp); //fread return
printf("%d. File Send %d Byte\n", i, numread);
if(numread > 0) //반환값검사
{
fwrite(file_send, 1, numread, writeFP); //file
numtotal += numread; //write한 data byte 합계
}
else if(numread == 0 && numtotal == totalbytes)
{
printf("File Trans Complete : %d Bytes\n", numtotal);
fwrite(file_send, 1, 0, writeFP);
break;
}
else
{
printf("파일 전송 에러");
break;
}
i++;
}Forums:


댓글 달기