高手请进:CSocket+CObList=重复接受第一次的数据?

RaymondKing 2008-04-02 11:51:42
如题,使用CSocket发送数据,每次发送的数据集合用CObList存储,数据每次递增1,但是为什么每次接受到的都是第一次的数据?
请各位高手帮忙看看!

//数据定义:
class CNetMsg : public CObject
{
DECLARE_SERIAL(CNetMsg);
public:
virtual ~CNetMsg(){}

virtual CString GetMessage() {ASSERT(false);return CString(_T(""));};
};

class CPlayerMsg : public CNetMsg
{
DECLARE_SERIAL(CPlayerMsg);

public:
int id;
CString name;

CString GetMessage()
{
CString s;
s.Format(_T("Player ID: %d, Player Name: %s"), id, (LPCTSTR)name);
return s;
}

void Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
ar << id;
ar << name;
}
else
{
ar >> id;
ar >> name;
}
}
};
typedef CObList MsgQueue;

// 发送代码:
static int i = 0;
i++;
CPlayerMsg pm;
pm.id = i;
pm.name = _T("Jerry");

MsgQueue mq;
mq.AddHead(&pm);
mq.Serialize(*m_pArOut);

// 接收代码:
MsgQueue mq;
mq.Serialize(*m_pArIn);
for (int i = 0; i < mq.GetSize(); i++)
{
CNetMsg * pNetMsg = static_cast<CNetMsg*>(mq.GetHead());
CString msg = pNetMsg->GetMessage();
msg += _T(" ") + CTime::GetCurrentTime().Format(_T("%H:%M:%S")); // 接收加时间戳
TRACE("%s\n", msg);
}
...全文
69 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
UltraBejing 2008-05-01
  • 打赏
  • 举报
回复
这个简单啊,网上搜一下就得到答案了.
zhoujianhei 2008-04-02
  • 打赏
  • 举报
回复
POSITION pos
for( pos = mq.GetHeadPosition(); pos != NULL; )
{
CNetMsg * pNetMsg = static_cast <CNetMsg*> (mq.GetNext( pos ));
CString msg = pNetMsg-> GetMessage();
msg += _T( " ") + CTime::GetCurrentTime().Format(_T( "%H:%M:%S ")); // 接收加时间戳
TRACE( "%s\n ", msg);
}
RaymondKing 2008-04-02
  • 打赏
  • 举报
回复
mq是接收函数里的局部变量,离开该函数就自动释放了。
我试了一下,用CStringList就可以正常接收,但是CObList就是不可以,不知道这是不是跟CObList可以装载的类类型可变有关。
CathySun118 2008-04-02
  • 打赏
  • 举报
回复
CNetMsg * pNetMsg = static_cast <CNetMsg*> (mq.GetHead());
这句话就是取第一个阿
你应该取后Remove掉Head吧
RaymondKing 2008-04-02
  • 打赏
  • 举报
回复
不是指针往后移的问题,因为现在我每次只发送一个数据包(一个结点)的数据,所以只有头结点里面有数据,而且mq是接收函数里的局部变量,接收完就自动销毁了,下次收到的应该是新数据,但是现在仍然是旧的数据,这是问题的关键!
But I don't know how to solve the problem! Help!
薛勇 2008-04-02
  • 打赏
  • 举报
回复
老大,保存一个数据以后,指针要向后移一位啊
mq.GetHead() 改为mq.GetHead()+=1
scq2099yt 2008-04-02
  • 打赏
  • 举报
回复
指针移位

18,356

社区成员

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

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