南窗雨 2015-11-27 13:00 采纳率: 100%
浏览 2161
已采纳

recv返回值问题和在while(recv())的返回值不一样

if ((select(sockfd + 1), &readfd, NULL, NULL, &stime) > 0)
{
    #if 1
    nlen = recv(sockfd, pcBuffer, 199, 0);
    printf("recv num(%d), buffer num(%d).\n", nlen, lRecvnum);
    if ((lRecvnum + nlen) < 199)
    {
        lRecvnum += nlen;
        pcBuffer += nlen;
        printf("recv num(%d), buffer num(%d), buffer(%s).\n", nlen, lRecvnum, buf);
    }
    #else
    while ((nlen = recv(sockfd, pcBuffer, 199, 0)) > 0)
    {
        printf("recv num(%d), buffer num(%d).\n", nlen, lRecvnum);
        if ((lRecvnum + nlen) < 199)
        {
            Recvnum += nlen;
            pcBuffer += nlen;
            printf("recv num(%d), buffer num(%d), buffer(%s).\n", nlen, lRecvnum, buf);
        }
    }
    #endif
}

现在想问的是执行上面一段代码,就是#if 1,recv返回的值是正常的,返回值是199跟写到pcBuffer的数据是一样的,但是如果把#if 1改成#if 0,执行下面在
while ((nlen = recv(sockfd, pcBuffer, 199, 0)) > 0)的代码分支的时候,recv的返回值一直是1,但是写到pcBuffer的数据却是正确的,这个是为什么?recv的返回值是1,但是写到pcBuffer中的个数却不是1,而是正确的个数,为什么这个时候的recv不返回不跟#if 1的时候是一样的,也是199?

  • 写回答

3条回答 默认 最新

  • 关注

    按正确的逻辑
    while ((nlen = recv(sockfd, pcBuffer, 199, 0)) > 0)这个应该改为

    Recvnum = 0;
    while ((nlen = recv(sockfd, pcBuffer, 199- Recvnum, 0)) <199)
    {
    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥50 MATLAB APP 制作出现问题
  • ¥15 wannier复现图像时berry曲率极值点与高对称点严重偏移
  • ¥15 利用决策森林为什么会出现这样·的问题(关键词-情感分析)
  • ¥15 DispatcherServlet.noHandlerFound No mapping found for HTTP request with URI[/untitled30_war_e
  • ¥15 使用deepspeed训练,发现想要训练的参数没有梯度
  • ¥15 寻找一块做为智能割草机的驱动板(标签-stm32|关键词-m3)
  • ¥15 信息管理系统的查找和排序
  • ¥15 基于STM32,电机驱动模块为L298N,四路运放电磁传感器,三轮智能小车电磁组电磁循迹(两个电机,一个万向轮),怎么用读取的电磁传感器信号表示小车所在的位置
  • ¥15 如何解决y_true和y_predict数据类型不匹配的问题(相关搜索:机器学习)
  • ¥15 PB中矩阵文本型数据的总计问题。