MFC 中的socket通信recv上下2次接收内容比较

忆朵小花 2013-12-23 11:16:21
我用recv收到机器发过来的消息。
recv(f_socket,ptr,len,0);

发送内容一样,我想比较上一次和下一次接收的内容,如何比较。
void CCTestDlg::OnBnClickedBtnSend()
{
while(f_socket!=INVALID_SOCKET)
{
int ret=send(f_socket,buffer,len1,0);

int nRetLen = recv(f_socket, ptr, len,0 );

}
}
大致代码就这样。如果我用strcpy把ptr内容copy到一个buf空间,但是当我下一次再接收的时候,会把第一次的内容覆盖。不能比较了。怎么修改。
...全文
132 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhuyf87 2013-12-23
  • 打赏
  • 举报
回复
可以用vector,每次接收到的数据push_back。
版主大哥 2013-12-23
  • 打赏
  • 举报
回复
strcpy遇到‘\0’就结束拷贝,如果ptr所指的内存很长一段都没有'\0',那不是... 用strncpy,或者memcpy。你不是有nRetLen收到的字节数... 比较的话,要将所有接收的buf都保存,用1L说的vector,这样就都在了,你想怎么比较就怎么比较
这个娜戒海了 2013-12-23
  • 打赏
  • 举报
回复
引用 5 楼 u012986898 的回复:
[quote=引用 4 楼 GLSC_CENA 的回复:] cstring a; cstring b; a接收第一次数据,b接收第二次数据 进行a,b比较操作 比较完成,复制数据b到a,清空b b接收第三次数据,再进行比较,不知道楼主是不是这么个意思
我的这个 没有循环。 我的recv直接就是先给机器发送,然后recv机器反馈的消息。按照你这样,我copy第一次的数据到a,下次再接收消息的时候,走的还是第一次的老路子,还是会copy到a,会把原数据覆盖的。[/quote] 第一次到a,第二次到b,然后进行比较,不可以? 或者你就用一个队列或容器,每次收到就往里面插,插到一定数值以后可以把前面的都清空,然后再重新插入,这个应该很好实现的
忆朵小花 2013-12-23
  • 打赏
  • 举报
回复
引用 4 楼 GLSC_CENA 的回复:
cstring a; cstring b; a接收第一次数据,b接收第二次数据 进行a,b比较操作 比较完成,复制数据b到a,清空b b接收第三次数据,再进行比较,不知道楼主是不是这么个意思
我的这个 没有循环。 我的recv直接就是先给机器发送,然后recv机器反馈的消息。按照你这样,我copy第一次的数据到a,下次再接收消息的时候,走的还是第一次的老路子,还是会copy到a,会把原数据覆盖的。
这个娜戒海了 2013-12-23
  • 打赏
  • 举报
回复
cstring a; cstring b; a接收第一次数据,b接收第二次数据 进行a,b比较操作 比较完成,复制数据b到a,清空b b接收第三次数据,再进行比较,不知道楼主是不是这么个意思
fishion 2013-12-23
  • 打赏
  • 举报
回复
添加一个int型的成员变量来标记下当前buff的下标
忆朵小花 2013-12-23
  • 打赏
  • 举报
回复
求大神帮忙啊

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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