不能触发OnReceive事件了
【天运子】 2010-05-18 11:06:35 用CSocket的派生类通讯,在接受一段时间后就不能触发OnReceive事件了 为什么?
但是不知道用什么方法解决?我已经调试很久了 确定 错误就出现在这里了,程序是用来文件传输的
void CServer_TransfersDlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, "所有文件 (*.*)|*.*||", this);
dlg.m_ofn.lpstrTitle = _T("打开");
if(dlg.DoModal() == IDOK)
{
m_strPath = dlg.GetPathName();
m_strFileName = dlg.GetFileName();
SetDlgItemText(IDC_EDIT1,m_strPath);
//打开文件
CFile file(m_strPath, CFile::modeRead);
//获取文件大小
m_dwFileSize = file.GetLength();
m_strFileSize.Format("%ld 字节", m_dwFileSize);
GetDlgItem(IDC_FILE_NAME)->SetWindowText(dlg.GetFileName());
GetDlgItem(IDC_FILE_SIZE)->SetWindowText(m_strFileSize);
GetDlgItem(IDC_TRANSFERS_TIP)->SetWindowText(_T("已发送:"));
//关闭文件
file.Close();
UpdateData(FALSE);
//发出文件发送请求
for (int i=0;i<50;i++)
{
if (m_psockClient[i]!=NULL)
{
CMessage* pMsg = new CMessage(REQUEST, m_strFileName, m_dwFileSize);
m_psockClient[i]->SendMsg(pMsg);
}
}
GetDlgItem(IDC_BUTTON2)->EnableWindow(FALSE);
}
//设置等待超时定时器
m_nTimer = SetTimer(1, 50000, NULL);
}
上面是发送端的代码 是用来发送文件属性的一个消息的
下面是接受端的代码,是用来告诉对方文件请求被接受且准备好接收
LRESULT CClient_TransfersDlg::OnAcceptTransfers(WPARAM wParam, LPARAM lParam)
{
//告诉对方文件请求被接受且准备好接收
CMessage* pMsg = new CMessage(ACCEPT);
m_psockClient->SendMsg(pMsg);
return 0;
}
问题就是这2个地方了 运行一段时间后,这2个地方发送消息的时候,不能触发
void CClientSocket::OnReceive(int nErrorCode)
{
m_pdlgMain->ProcessReceive(this);
CSocket::OnReceive(nErrorCode);
}
上面的函数了,,先说下 程序能运行 并且成功,只是在运行一段时间后就不能触发OnReceive事件了 为什么?