社区
网络编程
帖子详情
CArchive::IsBufferEmpty()为什么总是TRUE值?
dxj2000yt
2004-08-31 03:38:28
与CSocketFile配合使用时,CArchive::IsBufferEmpty()为什么总是TRUE值?
即使发送端已经发送了数据也是这样,什么原因呢?
...全文
207
9
打赏
收藏
CArchive::IsBufferEmpty()为什么总是TRUE值?
与CSocketFile配合使用时,CArchive::IsBufferEmpty()为什么总是TRUE值? 即使发送端已经发送了数据也是这样,什么原因呢?
复制链接
扫一扫
分享
转发到动态
举报
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),
CA
rc
hive
详解
CA
rc
hive
允许以一个永久二进制(通常为磁盘存储)的形式保存一个对象的复杂网络,它可以在对象被删除时,还能永久保存。可以从永久存储中装载对象,在内存中重新构造它们。使得数据永久保留的过程就叫作“串行化”。...
CA
rc
hive
详解
================================本文转自============================== ...
CA
rc
hive
没有基类。
CA
rc
hive
允许以一个永久二进制(通常为磁盘存储)的形式保存一个对象的复杂网络
SOCKET类的设计和实现
return
TRUE
; int nResult = GetLastError(); Close(); WSASetLastError(nResult); } return FALSE; } 其中: 参数1表示本socket的端口,缺省是0,如果要创建数据报的socket,则必须指定一个端口号。 参数2表示本...
使用CSocket、CSocketFile及
CA
rc
hive
组合接收不到数据的一种原因
客户端使用CSocket、CSocketFile及
CA
rc
hive
组合, 关键代码如下: void CClientSock::init(CClientDlg* pdlgClient) { m_pdlgClient=pdlgClient; m_psockFile=new CSocketFile(this,
TRUE
); m_parInput=new
CA
MFC中的
CA
rc
hive
(1)
class
CA
rc
hive
{ protected: enum SchemaMapReservedRefs { objTypeArrayRef = 1 }; enum LoadArrayObjType{ typeUndefined = 0, typeCRuntimeClass = 1, typeCObject = 2 }; public: // Flag
网络编程
18,363
社区成员
64,187
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章