18,356
社区成员
发帖
与我相关
我的任务
分享
UINT ReceiveDataThread(LPVOID lpParam)
{
CFileClientDlg* dlg=(CFileClientDlg*)lpParam;
CString str,str1,str2;
CSocket sockRecv;
sockRecv.Create();
str="192.168.2.121";
while(!sockRecv.Connect(str,4040)==0)
{
Sleep(50);
}
str2="F:\\test.jpg";
CFile file;
file.Open(str2, CFile::modeCreate | CFile::modeWrite);
BOOL bFileFail=FALSE;
DWORD dwTemp = 0;
sockRecv.AsyncSelect(0);
sockRecv.IOCtl( FIONBIO, &dwTemp);//变为阻塞方式
UINT uiLength;
sockRecv.Receive(&uiLength, 4);//接收发方(Server端)的文件大小
int iBufSize = 1024 * 5;
int iSize = iBufSize;
LPBYTE pBuf = new BYTE[iBufSize];
int iNumByte;
UINT uiTotal = 0;
while(uiTotal < uiLength)
{
if((int)(uiLength - uiTotal) < iBufSize)
iSize = uiLength - uiTotal;
int iCount=0;
while(iCount<iSize)
{
iNumByte = sockRecv.Receive(pBuf, iSize-iCount);
if(iNumByte == SOCKET_ERROR)
{
AfxMessageBox("接收错误!");
goto ExitLable2;
}
iCount+=iNumByte;
file.Write(pBuf, iNumByte);
}
uiTotal += iCount;//以实际接收字节为准
}
AfxMessageBox("接收文件成功!");
bFileFail=TRUE;
ExitLable2:
delete[] pBuf;
file.Close();
if(!bFileFail)
{
CFile::Remove( str2 );
}
sockRecv.Close();
return 0;
}