您的位置:程序门 -> vc/mfc -> 网络编程



聊天程序编写过程中遇到的一系列无头绪的错误


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


聊天程序编写过程中遇到的一系列无头绪的错误
发表于:2007-05-19 15:31:19 楼主
1、当客户端登录失败后(无用户名或密码错误),就要断开连接,因为我是一起用csocket、carchive、csocketfile的,所以我进行了一下删除
                                          if(m_parchivein!=null)
delete   m_parchivein;
if(m_parchiveout!=null)
delete   m_parchiveout;
if(m_pfile!=null)
delete   m_pfile;
delete   m_pconsock;
m_pconsock=null;
m_pfile=null;
但是不知道为什么加上最后两句就出错了,不加反而没事?

2、当我要关闭程序时,要进行一些内存清理,同样也手动删除以上对象:
if(m_plogindlg!=null)
m_plogindlg-> destroywindow();
if(m_parchivein!=null)
delete   m_parchivein;
if(m_parchiveout!=null)
delete   m_parchiveout;
if(m_pfile!=null)
delete   m_pfile;
if(m_pconsock!=null)
delete   m_pconsock;
m_pconsock=null;
m_pfile=null;
结果也出错了。。现在我就不知道为什么不能直接这样delete?

3、删除套接字对象前要不要先关闭套接字,即调用csocket::close()函数?
发表于:2007-05-19 22:35:011楼 得分:0
没人回答么??
我已经被这些问题缠绕了几天,根本不知道怎么解决。后面还有一个更大的问题等着我思索,想到头都大了。。
发表于:2007-05-19 22:40:072楼 得分:0
重复删除么?
发表于:2007-05-20 01:19:253楼 得分:0
设置so_dontlinger或者sleep一会儿试试看
发表于:2007-05-20 11:12:284楼 得分:0
在第一个问题中,是因为我登录失败了,所以要删除这些对象: delete   m_parchivein;
m_parchivein=null;

delete   m_parchiveout;
m_parchiveout=null;

delete   m_pfile;
m_pfile=null;

delete   m_pconsock;
m_pconsock=null;
我调试了下,以上几句并没有出错,而是当函数最后返回时,就报错了,说unhandle   exception
in   xxx.exe(mfc42d.dll),然后指示这一行(return语句)
                  _afx_inline   bool   carchive::isbufferempty()   const
{   return   m_lpbufcur   ==   m_lpbufmax;   }
我不知道mfc什么时候执行上面这些代码,如果是在我删除了carchive对象后再执行这些代码确实会出错,可是为什么会这样呢?难道删除前要做什么准备?我看些参考书也是直接就delete对象,并没有考虑什么呀?
发表于:2007-05-20 13:07:105楼 得分:0
我知道错误所在了。。原来是我粗心大意(没办法,程序一个人做,而且断断续续地写,不免有些细节忘记了)。。我开始用循环语句来接收数据:
do
{
msg.serialize(*m_parchivein);
disposemsg(msg);
}while(!m_parchivein-> isbufferempty());
disposemsg(msg)函数就是用来处理接收到的消息,如果登录失败,则删除和套接字关联的对象,这样当函数返回后,m_parchivein-> isbufferempty()就执行,可是m_parchivein已经被我delete掉了,所以会出错。。


现在剩第3个问题了,csocket::close()函数用来关闭套接字,这个“关闭”做了些什么工作,是不是并没有把csocket对象删除?
还有按我的想法,当客户端登录失败,服务器那边就会删掉与该客户端连接的套接字,而客户端这边可能还会继续试图登录,那么能不能继续使用原来的套接字??如果能,那要怎么做??直接connect()行不行?


快速检索

热门点击