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;
}
}
你怎么判断又有数据来的,一般result.bytes_transferred () == 0是网络连接断开 else
{
if(result.bytes_transferred () == 0)
{
pMainDlg->Process_Link_like_close(result.handle(),this);
}
result.message_block ().release ();
delete this;
}
上一段代码已经完全确定执行,连delete this都执行了;
但是,原本的连接里,数据依然很正常的来?!
我对接受的数据全部16进制显示,所以我看的见 回复 2# sunlock
我对接收的数据全部16进制显示,何时来数据、来什么样的数据、从哪来的,都能看出来。
虽然我又做了相关的处理,但指标不治本。
如果你有思想,还请指点一下 但是,原本的连接里,数据依然很正常的来?!
我对接受的数据全部16进制显示,所以我看的见
你对象都删除了,原本的连接是指什么呢?
你是用第三方抓包软件看到的? 你可以做个简单的Proactor服务器试试,使两个客户端软件逻辑通信。要长时间连接、大量数据定时发送、接收,最好在那种网络经常不稳定的环境中。
页:
[1]