socket的一个问题
在网上很多地方都能搜一个一个Socket传输文件的例子,其中发送文件的时候有一句代码我不明白怎么搞得,希望大家指教一下。
只贴部分代码
UINT uiLength = file.GetLength();
sockSend.Send(&uiLength, 4);//传送文件大小到接收方(Client端)
int iNumByte;
UINT uiTotal = 0;
while(uiTotal < uiLength)
{
int iEnd=pDlg->m_bSendEnd;
//传送发送端状态(是否结束)
iNumByte = sockSend.Send(&iEnd, sizeof(int));
//发送错误
if(iNumByte == SOCKET_ERROR)
{
AfxMessageBox("发送错误!");
goto ExitLable1;
}
else if(iEnd==1)//发送端终止
{
AfxMessageBox("发送端终止");
goto ExitLable1;
}
//读取文件内容
if((int)(uiLength - uiTotal) < iBufSize)
iSize = uiLength - uiTotal;//当小于缓冲区iTEST时的处理
iSize=file.Read(pBuf , iSize);//得到读取的字节数
int iCount=0;
//发送定长文件数据
while(iCount<iSize)
{
iNumByte = sockSend.Send(pBuf, iSize-iCount);//注意iNumByte为实际的发送字节数,不要以iSize为准
if(iNumByte == SOCKET_ERROR)
{
AfxMessageBox("发送错误!");
goto ExitLable1;
}
iCount+=iNumByte;
if(iCount<iSize)
{
file.Seek(iSize-iCount,CFile::current); }
}
///////////////就是这句file.seek(),我的理解是如果发送的字节数不足iSize,下次就应该发送pBuf中iCount后的内容啊,为何此处是将文件的指针移位呢???
uiTotal += iCount;
//设置发送数据进度条
pDlg->m_CtrlProgressSend.SetPos(int(((double)uiTotal/uiLength)*100));
str.Format("发送进度:%d%%",int(((double)uiTotal/uiLength)*100));
//表明发送数据百分比
pDlg->GetDlgItem(IDC_STATIC_SEND)->GetWindowText(str1);
if(str1!=str)
pDlg->GetDlgItem(IDC_STATIC_SEND)->SetWindowText(str);
}