客户端和服务端连接之后进行文件的传输,当客户端不想传输时怎么中止传输? 客户端和服务端都有一个线程用于接收和发送数据的
客户端
   CreateThread(NULL,0,CLisen,this,0,NULL);
DWORD WINAPI CLisen(LPVOID lparam)
{
    CMyDlg *dlg = (CMyDlg*)lparam; COMMAND command;
memset((char*)&command, 0, sizeof(command)); while(true)
{
while(true)
{
memset((char*)&command, 0, sizeof(command));
if(recv(server, (char*)&command, sizeof(command), 0)==0)
{
break;
}
else
{
switch(command.ID)
{
case GetDriver:
dlg->GetDriverProc(command.lparam);
break;
case GetDirInfo:
dlg->GetDirInfoProc(command.lparam);
break;
case ExecFile:
dlg->ExecFileProc(command.lparam);
         break;
case GetFile:
dlg->GetFileProc(command.lparam);
break;
case PutFile:
dlg->PutFileProc(command.lparam);
break;
case FileInfo:
dlg->GetFileInfoProc(command.lparam);
break;
case CreateDir:
dlg->CreateDirProc(command.lparam );
break;
case DelDir:
dlg->DelDirProc(command.lparam );
break;
case ShutDown:
dlg->ShutDownProc(command.lparam ); 
}
}
}
}   closesocket(server);
   WSACleanup();
   return 0;
}
void CMyDlg::OnExecFile() 
{
// TODO: Add your command handler code here
HTREEITEM CurrentNode=m_tree.GetSelectedItem();
if(CurrentNode==NULL)
{
return;
}
CString Temp;
CString FullPath="";
while(CurrentNode!=m_hRoot)
{
Temp=m_tree.GetItemText(CurrentNode); 
if(Temp.Right(1)!="\\")
{
Temp+="\\";
}
FullPath=Temp+FullPath;
CurrentNode=m_tree.GetParentItem(CurrentNode);
}
POSITION pos;
pos=m_list.GetFirstSelectedItemPosition();
int i;
i=m_list.GetNextSelectedItem(pos);
if(i>=0)
{
       FullPath+=m_list.GetItemText(i,0);
}
else
{
MessageBox("请选择要运行的文件");
}
COMMAND command;
memset((char*)&command,0,sizeof(command));
command.ID=ExecFile;
strcpy((char*)command.lparam,FullPath.LockBuffer());

if(send(server,(char*)&command,sizeof(command),0)==SOCKET_ERROR )
{
       MessageBox("客户端发送执行文件路径给服务端失败!");
}}
void CMyDlg::GetFileProc(BYTE* DATE)
{
FILEINFO* fi=(FILEINFO*)DATE;
    CFile file;
    

    PublicDir+="\\";
    PublicDir+=fi->FileName; int FileLen;
FileLen=fi->FileLen;
int nChunkCount;
nChunkCount=FileLen/CHUNK_SIZE;
    if(nChunkCount%CHUNK_SIZE!=0)
 {
         nChunkCount++;
 }
m_pro.SetRange(0,nChunkCount);
m_pro.SetStep(1);
    if(file.Open(PublicDir,CFile::modeWrite|CFile::typeBinary|CFile::modeCreate )) {
char* date=new char[CHUNK_SIZE];
         for(int i=0;i<nChunkCount;i++)
   {
          m_pro.StepIt();
          int nLeft;
   if(i+1==nChunkCount)
   {
   nLeft=FileLen-CHUNK_SIZE*(nChunkCount-1);
   }
   else
   {
   nLeft=CHUNK_SIZE;
   }
   int idx=0;
 
   while(nLeft>0)
   {
   int ret=recv(server,&date[idx],nLeft,0);
   if(ret==SOCKET_ERROR)
   {
   MessageBox("文件传输过程发生错误");
   break;
   }
   nLeft-=ret; 
   idx+=ret;
   }
   file.Write(date,CHUNK_SIZE);
   }
   file.Close();
   delete[] date;
   MessageBox("文件传输完毕");
   m_pro.SetPos(0);
   GetDlgItem(IDC_WORK_STATIC)->SetWindowText("文件下载完毕");
}
}