tengmo535 发表于 2011-5-10 15:44:44

result.bytes_transferred () == 0连接断开,但之后又有数据来?!

void CMyClient::handle_read_stream (const ACE_Asynch_Read_Stream::Result &result)
{
        //开始读操作
        //显示读取的信息
        //        result.message_block ().rd_ptr () = '\0';

        if (result.success () && result.bytes_transferred () != 0)
        {
                int recvlen=result.bytes_transferred();
                BYTE* recvBuf=(BYTE*)(result.message_block().rd_ptr());

                pMain->Decomposition(recvBuf,recvlen,partBuf);//44 48分解开来

                result.message_block ().release();
                // 如果还存在未读取数据,则继续读取
                if (this->initiate_read_stream () == -1)
                {
                        pMain->MyLineAdd_to_list(SYSTEM_ERROR,NULL_INFO,_T("分配读空间失败!"));
                        return;
                }
        }
        else
        {
                //不存在,则释放消息块并关闭SOCKET连接
                /***********************************************/
                if(result.bytes_transferred () == 0) //此处已成立,但之后数据继续来,为什么?
                        pMain->Process_S_Server_is_closed();//这样的结果十分影响我自己的处理

                result.message_block ().release ();

                /***********************************************/
//                 ACE_OS::shutdown(this->handle(), ACE_SHUTDOWN_BOTH);
//                 ACE_OS::closesocket (result.handle());
                delete this;
        }
}

sunlock 发表于 2011-5-17 19:02:27

你怎么判断又有数据来的,一般result.bytes_transferred () == 0是网络连接断开

tengmo535 发表于 2011-5-18 11:13:43

        else
        {
                if(result.bytes_transferred () == 0)
                {
                        pMainDlg->Process_Link_like_close(result.handle(),this);
                }

                result.message_block ().release ();
                delete this;
        }
上一段代码已经完全确定执行,连delete this都执行了;
但是,原本的连接里,数据依然很正常的来?!
我对接受的数据全部16进制显示,所以我看的见

tengmo535 发表于 2011-5-18 11:22:31

回复 2# sunlock


    我对接收的数据全部16进制显示,何时来数据、来什么样的数据、从哪来的,都能看出来。

虽然我又做了相关的处理,但指标不治本。

如果你有思想,还请指点一下

sunlock 发表于 2011-5-23 23:49:29

但是,原本的连接里,数据依然很正常的来?!
我对接受的数据全部16进制显示,所以我看的见

你对象都删除了,原本的连接是指什么呢?
你是用第三方抓包软件看到的?

tengmo535 发表于 2011-5-25 16:06:03

你可以做个简单的Proactor服务器试试,使两个客户端软件逻辑通信。要长时间连接、大量数据定时发送、接收,最好在那种网络经常不稳定的环境中。
页: [1]
查看完整版本: result.bytes_transferred () == 0连接断开,但之后又有数据来?!