我的CSocket客户端怎么只能响应一次OnReceive事件????
客户端接收代码
如下void CClientSocket::OnReceive(int nErrorCode)
{
// TODO: Add your specialized code here and/or call the base class
m_pDlg->OnReceive();
CAsyncSocket::OnReceive(nErrorCode);
}
VOID CFtpClientDlg::OnReceive()
{
char strTemp[128]="\0";
if(m_pClientSocket->Receive(strTemp,128) == SOCKET_ERROR)
{
return ;
}
// here begin send file
if(memcmp(strTemp,strReturn,strlen(strReturn)) == 0)
{
FILE *fp = fopen((char*)(LPCTSTR)m_strFilePath,"r+b");
if(!fp)
{
CloseSocket(m_pClientSocket);
return ;
}
BYTE *pByte = new BYTE[MAX_LENGTH];
long lRead=0;
long lsend = 0;
while(!feof(fp))
{
lRead = fread(pByte,1,MAX_LENGTH,fp);
if(((lsend = m_pClientSocket->Send(pByte,lRead)) == SOCKET_ERROR) ||(lsend != lRead))
}
fclose(fp);
if(pByte)
{
delete[] pByte;
pByte = NULL;
}
}else // send succeed!
{
m_pClientSocket->Receive(strTemp,0);
if(memcpy(strTemp,strAffirm,strlen(strAffirm)) == 0)
{
AfxMessageBox("Client OK!");
CloseSocket(m_pClientSocket);
}
}
}
客户端的工作步骤为:发送文件名和大小,等待服务段确认然后发送数据,一旦服务器接收完毕发送一个strAffirm同一内容的确认传输完毕的确认消息,然后结束本次传输。但是,调试发现,客户端的OnReceive事件只响应一次。即服务端第二次发送文件传输完毕的确认消息,客户端就不响应了,那位大侠说说什么原因阿?
问题点数:60、回复次数:5Top
1 楼toxyboy(不专业,我就顶,绝不误导别人!!)回复于 2004-09-03 11:45:11 得分 0
噢。贴错了。代码作个改动
else // send succeed!
{
//m_pClientSocket->Receive(strTemp,0); 这里不在接收
if(memcpy(strTemp,strAffirm,strlen(strAffirm)) == 0)
{
AfxMessageBox("Client OK!");
CloseSocket(m_pClientSocket);
}
}
Top
2 楼DentistryDoctor(不在无聊中无奈,就在沉默中变态)回复于 2004-09-03 11:47:24 得分 60
CloseSocket(m_pClientSocket);
?Top
3 楼toxyboy(不专业,我就顶,绝不误导别人!!)回复于 2004-09-03 11:47:38 得分 0
也就是说上面if(memcpy(strTemp,strAffirm,strlen(strAffirm)) == 0)这句永远都进不来。
Top
4 楼toxyboy(不专业,我就顶,绝不误导别人!!)回复于 2004-09-03 11:49:43 得分 0
inline void CFtpClientDlg::CloseSocket(CClientSocket *pTemp)
{
pTemp->Close();
delete pTemp;
pTemp = NULL;
GetDlgItem(IDCONNECT)->EnableWindow(TRUE);
}Top
5 楼toxyboy(不专业,我就顶,绝不误导别人!!)回复于 2004-09-03 11:51:02 得分 0
DentistryDoctor(牙科医生) 兄,看出什么问题了吗???请明示!!Top




