找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 3080|回复: 2

release版本出错

[复制链接]
发表于 2009-10-15 10:04:16 | 显示全部楼层 |阅读模式
问题:在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;
}
 楼主| 发表于 2009-10-15 10:26:53 | 显示全部楼层
在void CPserverDlg::OnFileSelect() 里只写了
CFileDialog fileDlg (TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,NULL,this);
发现函数退出的时候就出错。
........................
 楼主| 发表于 2009-10-15 10:37:36 | 显示全部楼层

回复 #2 psycheqiqi 的帖子

找到原因了。
我在server端加了
//for use TryEnterCriticalSection
#ifndef _WIN32_WINNT
# define _WIN32_WINNT 0x0500
#endif

把0x0500改成0x0400就好了
原因以后补上
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-12-23 13:52 , Processed in 0.028933 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表