传文件完了后怎么通知接受方?
在传文件时,我想等文件传完后发送个“end”字符信息给接受方以通知接受方文件传送完成,可是我怎么区分收到的文件信息还是end着个字符串信息哪?我的代码如下请大家帮哈忙哦
发送方:
CFile file(m_strFilePathName, CFile::modeRead|CFile::typeBinary);
SOCKET_STREAM_FILE_INFO FileInfo;
//初始化文件信息
strcpy(FileInfo.szFileTitle, file.GetFileName());
FileInfo.nFileSize = file.GetLength();
m_sConnectSocket.Send(&FileInfo, sizeof(SOCKET_STREAM_FILE_INFO));
BYTE * pBuffer = new BYTE[1024];
int nFileLen = file.GetLength();
int nSentLen = 0;
CString str;
int nLen;
do {
try
{
nLen = file.Read(pBuffer, 1024);
}
catch (CFileException * e)
{
e->ReportError();
}
m_sConnectSocket.Send(pBuffer, 1024);
nSentLen += nLen;
str.Format(_T("%d"), nSentLen*100/nFileLen);
SetWindowText(_T("Sending.....") + str + _T("%"));
} while(nSentLen < nFileLen);
CString temp="end";
m_sConnectSocket.Send(&temp,temp.GetLength());
AfxMessageBox("Send Finish");
file.Close();
AfxMessageBox("Send Success");
delete pBuffer;
接收方:
if (收到的是结束字符end){
FileOpen=false;
file.close();
AfxMessageBox("recive success");
}
if (!FileOpen){
CFileDialog FileDlg(FALSE, NULL, NULL, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"All File(*.*)|*.*|");
if (FileDlg.DoModal() == IDCANCEL)
return;
m_strFilePathName = FileDlg.GetPathName();
file.Close();
if (file.Open(m_strFilePathName, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary)==false){
AfxMessageBox("File Cann't Open");
file.Close();
}
m_sConnectSocket.Receive(&FileInfo, sizeof(SOCKET_STREAM_FILE_INFO)); //Now we get the File Size first
FileOpen=true;
}
BYTE * pBuffer = new BYTE[1024];
int nFileLen = FileInfo.nFileSize;
int nRecvLen = 0;
CString str;
int nLen;
nLen=m_sConnectSocket.Receive(pBuffer, 1024);
try
{
file.Write(pBuffer, nLen);
}
catch (CFileException * e)
{
e->ReportError();
}
nRecvLen += nLen;
str.Format(_T("%d"), nRecvLen*100/nFileLen);
SetWindowText(_T("Sending.....") + str + _T("%"));
各位大哥帮我看下有哪不妥,该怎么修改,要简单点的方法啊,不要太复杂的用什么线程什么的小弟看不懂哈