程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> select-recv返回值問題和在while(recv())的返回值不一樣

select-recv返回值問題和在while(recv())的返回值不一樣

編輯:編程綜合問答
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?

最佳回答:


按正確的邏輯
while ((nlen = recv(sockfd, pcBuffer, 199, 0)) > 0)這個應該改為

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved