char recvBuf[100];
memset(recvBuf ,0 ,100 );
recv(ClientSocket, recvBuf ,100 , 0);
-------------------------------------
上述写法第二个参数没问题,请问怎么姜recvbuf改成string类型 使用,用string.c_str()不行,因为是 const char *类型,而第二个参数是char *类型,求大神解答

解决方案 »

  1.   

    不要直接使用string的数据
    因为string的数据是动态增长的
      

  2.   

    不能使用string,因为其长度未知。
    如果觉得缓冲区比较小,可以分多次recv
      

  3.   

    recv不能使用string(就算你预先为string分配了足够的内存,也可能有问题,string是一个非常复杂的类,要避免直接操作其内存),发送可以。就用数组是最好的。
      

  4.   

    你调用recv的时候,有个长度就是你的buffer的长度,所以socket是不会写到你的buffer之外的,这一点可以放心。理论上,你的buffer哪怕只有一个字节,也能成功接收任何大小的数据;无论你的buffer有多么的大,也不如数据大,所以循环接收是免不了的。
      

  5.   

    能帮忙写个循环recv的例子吗?最后还要把recv的数据打印到控制台
      

  6.   

    while( !bRecv ) 
    {
    int buflen = recv(ClientSocket, recvBuf ,sizeof(recvBuf), 0);
    printf(" %d", buflen);
    if (buflen == sizeof(recvBuf))
    {
    memset(recvBuf ,0 ,10 );
    }
    else
    {
    bRecv = TRUE;
    }
    }
    ------------------------------------
    这样循环recv时 当数据正好和缓冲区大小一样 就跳不出来……