kleavings 发表于 2009-8-10 14:53:52

关于使用 ACE_Proactor 做的服务器端与客户端交互的问题

客户端与服务器端建立连接,然后客户端发送消息给服务器端,但当长时间客户端没有发消息时,服务器端根据设置的超时会把连接给断掉,
如下:

        if (this->handle() != ACE_INVALID_HANDLE)               
        {
                ACE_Proactor::instance()->cancel_timer(*this,1);

                //放这里好吗?
                m_reader->cancel();
                m_writer->cancel();

                //显示客户端连接地址和端口
                //DisplayInfo(this->handle(), " disconnected.");
                ACE_OS::shutdown(this->handle(),SD_BOTH);
                ACE_OS::closesocket( this->handle() );
                this->handle(ACE_INVALID_HANDLE);
        }

而对应的此处理器并没有释放掉,而是返回给了上级等待有其他连接时再次使用。

在现在这种断开的情况下,客户端再次向服务器端发送消息,居然能发送,而且在 handle_write_stream 中的 result.success() 居然也成功了,不明白为什么???
当再发送第二条消息时,就能识别出来已经断开了。

kleavings 发表于 2009-8-10 14:56:20

还有请指点一下
我到底怎么做才能确保我发送的内容对方接收到了?
才能保证发送内容的正确性呢?
谢谢~~

modern 发表于 2009-8-11 10:38:54

先用工具查一下连接是否还存在,
另楼主确认关闭的代码执行到了么?

kleavings 发表于 2009-8-11 11:45:56

回复 #3 modern 的帖子

跟了一下,上面写的那段 关闭代码 确实是执行到了的~~~
有可能说关闭了一边,而连接还存在的情况出现吗?
谢谢~~

modern 发表于 2009-8-12 10:40:12

我的意思是用工具检查一下,
在楼主确认调用了关闭函数之后,
TCP连接的状态。
页: [1]
查看完整版本: 关于使用 ACE_Proactor 做的服务器端与客户端交互的问题