[MFC] 소켓 파일전송 프로그램 문의 드립니다.

xeranium의 이미지

일단 보내는쪽 소스는

	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밖에 생각나지 않아서 이렇게 질문 올립니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.