社区
网络编程
帖子详情
CArchive::IsBufferEmpty()为什么总是TRUE值?
dxj2000yt
2004-08-31 03:38:28
与CSocketFile配合使用时,CArchive::IsBufferEmpty()为什么总是TRUE值?
即使发送端已经发送了数据也是这样,什么原因呢?
...全文
245
9
打赏
收藏
CArchive::IsBufferEmpty()为什么总是TRUE值?
与CSocketFile配合使用时,CArchive::IsBufferEmpty()为什么总是TRUE值? 即使发送端已经发送了数据也是这样,什么原因呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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),
使用CSocket、CSocketFile及
CA
rc
hive
组合接收不到数据的一种原因
本文探讨了使用CSocket、CSocketFile及
CA
rc
hive
进行网络通信时遇到的问题,特别是在客户端接收服务器端发送的数据时出现卡顿的情况,并给出了两种不同场景下的对比结果。
Windows套接字系列六:带存档的套接字工作原理
本文介绍如何结合使用CSocket、CSocketFile与
CA
rc
hive
对象,实现通过Windows套接字简便地发送与接收数据。重点讲解了PacketSerialize功能及归档对象在套接字中的工作原理,并探讨了CSocketFile类特性及其与CSocket对象交互方式。
Receive
本文介绍了使用CSocket进行数据接收的方法,包括阻塞操作、多次数据到达的情况处理及如何判断数据是否完全读取完毕。对于独立使用CSocketFile的情况,需要注意数据可能分多次到达;而当与
CA
rc
hive
配合使用时,则可以通过Is
Buffer
Empty函数判断数据是否已经完全读取。
Serialization文档序列化(一)
本文介绍了MFC中的
CA
rc
hive
类,该类支持复杂对象网络的二进制存储与加载,实现对象的数据持久化。通过示例展示了如何使用
CA
rc
hive
类保存和读取包括原始数据类型在内的各种对象。
Windows Sockets:使用带存档的套接字
本文介绍CSocket编程模型,包括如何创建和使用CSocket类进行高效的数据传输。文章详细阐述了客户端与服务器通信的过程,以及使用
CA
rc
hive
进行序列化的步骤。
网络编程
18,357
社区成员
64,165
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章