앞서 살펴본 파일 송신에서 데이터를 보낼 때, 데이터의 크기만큼 실제로 데이터가 갔는지 확인하는 코드가 존재하지 않는다.

인터넷 환경은 기본적으로 불안정하기 때문에 데이터가 실제로 갔는지 확인하는 코드가 반드시 필요하다.

 

파일 송신 서버

 // 파일 전송 (부분 전송 처리)
    char byBuffer[65536];  // 64KB 버퍼
    int nRead, nSent, i = 0;
    while ((nRead = fread(byBuffer, sizeof(char), sizeof(byBuffer), fp)) > 0)
    {
        int nTotalSent = 0;
        while (nTotalSent < nRead)
        {
            nSent = send(hClient, byBuffer + nTotalSent, nRead - nTotalSent, 0);
            if (nSent == SOCKET_ERROR)
            {
                ErrorHandler("데이터 전송 중 오류가 발생했습니다.");
            }
            nTotalSent += nSent;
            printf("[%04d] 전송된 데이터 크기: %d / 누적: %d\n", ++i, nSent, nTotalSent);
            fflush(stdout);
        }
    }

 

파일을 송신한다. 

송신을 했는데 실제 송신한 데이터가 읽어온 데이터보다 작을 경우 그 차이만큼 다시 전송한다.

+ Recent posts