[MFC] 소켓 파일전송 프로그램 문의 드립니다.
글쓴이: xeranium / 작성시간: 수, 2009/10/14 - 9:08오후
일단 보내는쪽 소스는
BYTE *buff = new BYTE[4096]; int nCount = 0; do{ if( ( (nCount+1)*4096 ) < BUFFERSIZE){ //strncpy((char *)buff,(const char*)pBuff+(nCount*4096),4095); StrCopy(buff, pBuff+(nCount*4096), 2095); m_pClientSock->Send(pBuff+(nCount*4096), 4096); }else{ //strncpy((char *)buff,(const char*)pBuff+(nCount*4096), (BUFFERSIZE - (nCount*4096))); StrCopy(buff, pBuff+(nCount*4096), (BUFFERSIZE - (nCount*4096))); m_pClientSock->Send(pBuff+(nCount*4096), (BUFFERSIZE - (nCount*4096))); break; } nCount++; }while(1);
이렇게 원본 파일이 있는 pBuff에서 4096씩 buff에 읽어 들여서 보내고요
void lientSock::OnReceive(int nErrorCode) { // TODO: Add your specialized code here and/or call the base class CServerDlg* dlg = (CServerDlg*)AfxGetApp()->m_pMainWnd; BYTE *buff=new BYTE[4097]; int nRead; do{ nRead = Receive(buff, 4096); //dlg->OnReceive(BYTE* buff); dlg->OnReceive(buff, nRead); }while(nRead > 0); /* if( GetLastError() != WSAEWOULDBLOCK){ do{ nRead = Receive(buff, 4096); //dlg->OnReceive(BYTE* buff); //dlg->OnReceive(buff, nRead); }while(nRead > 0); } */ CAsyncSocket::OnReceive(nErrorCode); }
받는쪽에선 4096만큼씩 받아서 다이얼로그의 OnReceive에 받은 buff와 받은 싸이즈를 주고
OnReceive에서는 차곡차곡 다른 BYTE* 에 저장을 하는데...
무슨 이유인지
보내는쪽에서 디버그로 돌려보면 총 39번 돌아가는데 do~while()문에서
받는쪽에선 11번? 인가 돌아가고 멈춰버리네요...
강제로 for문으로 39번 마춰서 돌릴려고 해도 11번째에서 멈춰버리네요..
아마도 받는쪽 소켓쪽에서 무슨 메세지?? 같은게 생겨서 그런것 같은데...
도움 받을만한 곳이 kldp밖에 생각나지 않아서 이렇게 질문 올립니다.
Forums:
댓글 달기