파일 전송 프로그램 구현도중 알수 없는 무한루프가 발생합니다.

khm915의 이미지

리눅스 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++;
	}