|
问题:在release下
1:客户端给服务器发送消息、文件名、文件内容都是可以的
2:服务器给客户端发送消息可以,但在发送文件名时,能发过去,但在函数void CPserverDlg::OnFileSelect()退出的时候(即我在点服务器端弹出的对话框时)会出现内存不能写的错误
3:服务器和客户端的发送时的区别在于我在服务器端用一个LIST来记录连接的客户端,但应该不是LIST的问题,因为可以发送消息。
4:最大的困惑在于:为什么客户端的功能没问题,但服务器端不行,而且是部分不行。
代码如下:
客户端:
void CPclientDlg::OnSend()
{
// TODO: Add your control notification handler code here
CString str;
m_send->GetWindowText(str);
if(str==_T(""))
{
MessageBox("信息不能为空!");
return ;
}
str += [email=]'@'[/email];
char * s = (char *)(LPCTSTR)str;
HA_Proactive_Service *curSvr = HA_Proactive_Service::GetObj();
curSvr->WriteDate(s,strlen(s));
}
void CPclientDlg::OnFileSelect()
{
// TODO: Add your control notification handler code here
CFileDialog fileDlg (TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,NULL,this);
if(fileDlg.DoModal() != IDOK )
{
MessageBox("请选择传输的文件");
return;
}
else
{
sendFileName = fileDlg.GetFileName();//获得文件的名称
sendFileName += '$';
HA_Proactive_Service *curSvr = HA_Proactive_Service::GetObj();
curSvr->WriteDate((char *)(LPCTSTR)sendFileName,strlen(sendFileName));
sendFileName.Remove('$');
MessageBox(sendFileName);
}
}
服务器:
void CPserverDlg::OnSend()
{
// TODO: Add your control notification handler code here
CString str;
m_send->GetWindowText(str);
if(str==_T(""))
{
MessageBox("信息不能为空!");
return ;
}
str += [email=]'@'[/email];
char * s = (char *)(LPCTSTR)str;
list <HA_Proactive_Service *> ::iterator its;
for(its=HA_Proactive_Service::List.begin();its!=HA_Proactive_Service::List.end();its++)
{
HA_Proactive_Service *curSvr = *its;
curSvr->WriteDate(s,strlen(s));
}
/* for(;i<num;i++)
{
HA_Proactive_Service *curSvr = HA_Proactive_Service::GetObj();
curSvr->WriteDate(s,strlen(s));
}
i=0;
*/
}
void CPserverDlg::OnFileSelect()
{
// TODO: Add your control notification handler code here
CFileDialog fileDlg (TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,NULL,this);
if(fileDlg.DoModal() != IDOK )
{
MessageBox("请选择传输的文件");
return;
}
else
{
sendFileName = fileDlg.GetFileName();//获得文件的名称
sendFileName += '$';
char *s=(char *)(LPCTSTR)sendFileName;
list <HA_Proactive_Service *> ::iterator its;
for(its=HA_Proactive_Service::List.begin();its!=HA_Proactive_Service::List.end();its++)
{
HA_Proactive_Service *curSvr = *its;
curSvr->WriteDate(s,strlen(s));
}
sendFileName.Remove('$');
MessageBox(sendFileName);
}
}
int WriteDate(char *szSendBuf, int nSendCnt)
{
ACE_Message_Block *smb = new ACE_Message_Block(nSendCnt+1);
smb->copy(szSendBuf,nSendCnt+1);
int nResult = this->writer_.write(*smb,nSendCnt+1);
if ( nResult != 0)
{
ACE_TRACE("Write data failed!");
}
return nResult;
} |
|