高手请进: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);
}
...全文
116 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
  • 打赏
  • 举报
回复
指针移位
附训练好的 YOLO 权重与 PyQt 可视化检测界面,页面底部含可视化效果预览,毕设/课设开箱即用。 【数据集概况】 · 检测类别(中文):[领航车(leader)] · 训练集:414 张 · 验证集:39 张 · 测试集:20 张 · 总计:473 张 该数据集聚焦于室内走廊环境中对领航车的精准识别与定位,具备高度场景专一性与实际应用价值。图像采集于光线均匀、结构规整的建筑内部通道,背景干扰因素少,有利于模型在复杂环境下的目标提取能力训练。领航车作为核心检测对象,在不同距离和角度下均被清晰标注,为智能导航系统、自动化引导设备等提供可靠的数据支持。... 【训练曲线与评估图】 【模型训练配置】 参数 | 值 模型 | yolo26n 训练轮数 | 100 epochs 输入尺寸 | 640x640 批次大小 | 24 优化器 | auto 初始学习率 | 0.01 训练设备 【关键指标汇总】 训练了 77 个 epoch,最终轮指标: 指标 | 数值 mAP50 | **0.9950** mAP50-95 | 0.9141 Precision | 0.9985 Recall | 1.0000 train/box_loss | 0.5224 train/cls_loss | 0.2526 val/box_loss | 0.4307 val/cls_loss | 0.1407 【训练过程分析】 77 轮训练后 mAP50 达到 0.9950,模型收敛良好。Loss 曲线前段快速下降,后段趋于平稳,val_loss 无反弹,没有明显过拟合。mAP50-95 为 0.9141,和 mAP50 差距仅 0.08,框的定位精度也很扎实。 【模型性能评估】 Precision 0.9985、Recall 1.000... 使用场景:毕业设计、课程设计、深度学习入门、工业场景落地验证。
内容概要:本文围绕基于序贯蒙特卡洛模拟法的配电网可靠性评估展开深入研究,提出并实现了结合Matlab的仿真方法,用于精确评估配电网在多种故障场景下的供电可靠性。研究充分考虑了元件故障、时序恢复过程及系统运行的随机性与动态性,采用序贯抽样技术模拟系统状态转移过程,实现了对停电频率、停电时间、供电可用率等关键可靠性指标的量化分析。文中系统阐述了算法的设计流程、事件抽样机制、状态序列生成逻辑以及系统恢复策略,并通过典型算例验证了该方法在复杂配电网络中的有效性与实用性,为配电网的规划、运行与优化提供了科学的评估工具。; 适合人群:具备电力系统分析基础和Matlab编程能力的高校研究生、科研人员,以及从事配电网规划设计、运行维护与可靠性管理的工程技术人员。; 使用场景及目标:①掌握序贯蒙特卡洛模拟法在电力系统可靠性评估中的核心原理与实现方法;②学习利用Matlab构建配电网时序仿真模型,进行可靠性指标计算与分析;③为配电网的设备选型、网络结构优化、故障应对策略制定及韧性提升提供数据支撑与决策依据; 阅读建议:建议读者结合文中提供的Matlab代码实现步骤,动手复现实验过程,深入理解状态抽样、时序序列模拟、故障处理逻辑与指标统计等关键环节,并可进一步将该方法拓展应用于含分布式电源、储能系统等新型元件的现代复杂配电网可靠性评估研究。

18,356

社区成员

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

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