CArchive::IsBufferEmpty()为什么总是TRUE值?

dxj2000yt 2004-08-31 03:38:28
与CSocketFile配合使用时,CArchive::IsBufferEmpty()为什么总是TRUE值?
即使发送端已经发送了数据也是这样,什么原因呢?
...全文
207 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
dxj2000yt 2004-09-04
  • 打赏
  • 举报
回复
To gdy119(中国制造):
你就没看我的问题!!!!!!!!!!!!!!!

:原问题------
与CSocketFile配合使用时,CArchive::IsBufferEmpty()为什么总是TRUE值?
即使发送端已经发送了数据也是这样,什么原因呢
gdy119 2004-09-02
  • 打赏
  • 举报
回复
没收到数据通知之前都是false,一段有数据接收到_pArchiveIn->IsBufferEmtpy()非空
因为接收的是数据流,有可能一次不能完全接收,好比recv()不能接受全部数据一样!
数据流是连续的所以可以用这个循环不停的接收!直到_pArchiveIn->IsBufferEmtpy()为
空!
gdy119 2004-09-01
  • 打赏
  • 举报
回复
ReceiveMsg();是虚函数,
当收到数据的通知的时候我才调用!
当然一定有数据了!
dxj2000yt 2004-09-01
  • 打赏
  • 举报
回复
严重同意 oldboy1234 所问,你怎能知道第一次读就有数据?
我的代码如下,可IsBufferEmpty())总是为真:

while(!m_pArchiveIn->IsBufferEmpty())
{
ReceiveMsg();// pMsg->Serialize(*m_pArchiveIn);(pMsg为你想发送的消息类)

}

oldboy1234 2004-09-01
  • 打赏
  • 举报
回复
OK, 如楼上所言,那么你的代码里面
do
{
ReceiveMsg();
if (m_pSocket == NULL)
return;
}
while(!m_pArchiveIn->IsBufferEmpty());

m_pArchiveIn->IsBufferEmtpy()在什么情况下会是false,这个循环的目的是什么?
oldboy1234 2004-08-31
  • 打赏
  • 举报
回复
楼上的,你在之前调用IsBufferEmpty,返回的就是TRUE,为什么?
gdy119 2004-08-31
  • 打赏
  • 举报
回复
有可能你的接收代码不对!
一般的代码如下:
初始化部分:
m_pFile = new CSocketFile(m_pSocket);
m_pArchiveIn = new CArchive(m_pFile,CArchive::load);
m_pArchiveOut = new CArchive(m_pFile,CArchive::store);
接收部分:
do
{
ReceiveMsg();
if (m_pSocket == NULL)
return;
}
while(!m_pArchiveIn->IsBufferEmpty());
发送部分:
TRY
{
pMsg->Serialize(*m_pArchiveOut);(pMsg为你想发送定义的消息类)
m_pArchiveOut->Flush();

}
CATCH(CFileException, e)
{
m_pArchiveOut->Abort();

Disconnect();
}
END_CATCH


oldboy1234 2004-08-31
  • 打赏
  • 举报
回复
帮顶
名牌大灰狼 2004-08-31
  • 打赏
  • 举报
回复
CSocketFile,CArchive都只是CSocket的上层封装,为了我们编程更简单而已
VC6的MSDN附带的例子程序(比如SAMPLES\VC98\MFC\ADVANCED\CHATSRVR),

18,363

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧