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

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条)

报告相同问题?

悬赏问题

  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用
  • ¥15 Web.config连不上数据库
  • ¥15 我想付费需要AKM公司DSP开发资料及相关开发。
  • ¥15 怎么配置广告联盟瀑布流
  • ¥15 Rstudio 保存代码闪退
  • ¥20 win系统的PYQT程序生成的数据如何放入云服务器阿里云window版?