如何使用recv函数而不使用while(true)?

时间:2016-12-26 06:41:06

标签: sockets printf do-while

我正在尝试编写一个简单的客户端服务器应用程序,我从客户端发送数据&在服务器端接收它,我需要将该数据存储到公共缓冲区中,然后为每个客户端创建一个文件,并将该公共缓冲区数据打印到文件中。

    do  
    {
       int numByte=recv(server,buffer,bufsize,0);
       if ( numByte == -1 )
         {
           printf("ERROR : could not receive bytes \n");
         }
        //buffer[numByte]='\0';
        //bzero(buffer,10000);

    for(int i=0;i<10;i++)
    {
    strcpy(globalBuffer[i],buffer);
        //cout<<"Global_buffer:"<<globalBuffer[i];          
    }


    for(int j =0;j<10;j++){
    fprintf(fp, "%s",globalBuffer[j]);

    }
    //strcpy(buffer,globalBuffer[fileNum]);
    fflush(fp);
}while(!isExit);

上面的代码片段是我尝试将缓冲区数据复制到globalBuffer中以及稍后将globalBuffer数据打印到文件中的代码片段。我应该为每个文件只打印10个字符串消息但是因为我有do-while循环,并且永远不会结束循环fprintf(fp, "%s",globalBuffer[j])它不会因为do-while循环结束而且如果我尝试将缓冲区数据存储在do-while循环之外是不可能的,因为do-while循环永远不会结束。

有没有办法避免do-while循环,而不是在recv()函数中有任何标志可以作为do-while循环吗?

1 个答案:

答案 0 :(得分:0)

如果recv()返回零,则应该退出循环,这意味着对等体已断开连接,并且在大多数情况下,当它返回-1时,表示错误。你肯定见过这个吗?