CString strData;
do
{
CString temp;
pAo->ReadString(temp);
strData += temp;
} while (!pAo->IsBufferEmpty());
这是我从邮件服务器接收数据的函数.
当我 'quit'退出服务器后..CSocket::OnReceive(nErrorCode);还要触发..很多次..
strData 返回的数据都是空...
请问为什么还会触发多次呢..
当我要是把与CSocket关联的CArchive 对象删除掉后...就会出错...因为事件还在触发..还要读取数据..
这究竟是怎么回事?
7 个解决方案
#1
是不是一些FIN包和keepalive之类
建议在里面判断一下temp
那样就不需要返回了
建议在里面判断一下temp
那样就不需要返回了
#2
因为这个事件不断的触发... 本来.邮件已经完..退出服务器了..要清理资源...现在这个事件不停的触发...
无法清理资源..等触发了10多次后..就不会再触发了...
无法清理资源..等触发了10多次后..就不会再触发了...
#3
退出服务器了,应该调用一下socket的ShutDown()
#4
ShutDown 好像可以解决问题..为什么会这样呢..为什么要调用 ShutDown呢...
#5
因为你断开连接之后,数据队列中如果还存在数据,那些数据仍然会传送到接收数据的socket中,所以OnReceive仍然会响应。但你调用了ShutDown之后 socket就不再接收这些数据了。
#6
退出后就ShutDown关闭连接,清理...
#7
有道理..
那
do
{
CString temp;
pAo->ReadString(temp);
strData += temp;
} while (!pAo->IsBufferEmpty());
这个循环取数据...pAo->IsBufferEmpty 好像一直都是假..好像跟本不起作用..
我在接收邮件服务器返回的数据时后...readstring只读一行..就结束了..下次会再次触发OnRecive..
接收就会读取下面一行的内容了..
因为服务器返回的数据没有结束符给我判断,,,该怎么做才能把数据读完啊..
那
do
{
CString temp;
pAo->ReadString(temp);
strData += temp;
} while (!pAo->IsBufferEmpty());
这个循环取数据...pAo->IsBufferEmpty 好像一直都是假..好像跟本不起作用..
我在接收邮件服务器返回的数据时后...readstring只读一行..就结束了..下次会再次触发OnRecive..
接收就会读取下面一行的内容了..
因为服务器返回的数据没有结束符给我判断,,,该怎么做才能把数据读完啊..
#1
是不是一些FIN包和keepalive之类
建议在里面判断一下temp
那样就不需要返回了
建议在里面判断一下temp
那样就不需要返回了
#2
因为这个事件不断的触发... 本来.邮件已经完..退出服务器了..要清理资源...现在这个事件不停的触发...
无法清理资源..等触发了10多次后..就不会再触发了...
无法清理资源..等触发了10多次后..就不会再触发了...
#3
退出服务器了,应该调用一下socket的ShutDown()
#4
ShutDown 好像可以解决问题..为什么会这样呢..为什么要调用 ShutDown呢...
#5
因为你断开连接之后,数据队列中如果还存在数据,那些数据仍然会传送到接收数据的socket中,所以OnReceive仍然会响应。但你调用了ShutDown之后 socket就不再接收这些数据了。
#6
退出后就ShutDown关闭连接,清理...
#7
有道理..
那
do
{
CString temp;
pAo->ReadString(temp);
strData += temp;
} while (!pAo->IsBufferEmpty());
这个循环取数据...pAo->IsBufferEmpty 好像一直都是假..好像跟本不起作用..
我在接收邮件服务器返回的数据时后...readstring只读一行..就结束了..下次会再次触发OnRecive..
接收就会读取下面一行的内容了..
因为服务器返回的数据没有结束符给我判断,,,该怎么做才能把数据读完啊..
那
do
{
CString temp;
pAo->ReadString(temp);
strData += temp;
} while (!pAo->IsBufferEmpty());
这个循环取数据...pAo->IsBufferEmpty 好像一直都是假..好像跟本不起作用..
我在接收邮件服务器返回的数据时后...readstring只读一行..就结束了..下次会再次触发OnRecive..
接收就会读取下面一行的内容了..
因为服务器返回的数据没有结束符给我判断,,,该怎么做才能把数据读完啊..