我用socket通讯的时候,明明传送过来的字符大小是12654多个,而接收端也申请了12654个char 内存,但是我用recv函数得到的都只有大概8764个,不论如何测试,都是只接收到那么多,是不是recv函数的接收缓存区只有那么多,如果微软默认的是8K的话,那也应该是8192,为什么会接收不到所有的字符,请问是不是有什么函数设置recv函数接收的最大缓存区.
我是用VC和JAVA通讯的,不知这个有没有关系.
谢谢.

解决方案 »

  1.   

    setsockopt(s,SOL_SOCKET,SO_RECVBUF...);
      

  2.   

    recv函数有时不会一次性的将所有数据接收下来的,继续调用recv函数,直到接收完成就可以了.
      

  3.   

    很容易可以搞定:
    因为socket默认的缓冲区大小是8K,你一次当然只能接收8K的数据了:
    方法一:
    //设置socket接收缓冲区大小为128K int nRecvBuf=128*1024;
    setsockopt(m_hConnectSocket,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int));
    方法二:
    int nRead=0,nLeft=BUFFER_AUTO_INC_SIZE/*缓冲区大小*/,nLen=0,nLength=0;
    while(nLeft>0)
    {
    nRead=recv(m_hConnectSocket,(char*)pBuff/*缓冲区*/, nLeft,0);
    if(nRead==SOCKET_ERROR||nRead<=0||nRead==WSAEWOULDBLOCK)
    {
    break;
    }
    nLeft -= nRead;
    pBuff += nRead;
    nLen  +=nRead;
      

  4.   

    对此接收,判断接收的数据量是否是需要的值。然后合并到一起!
    gdy119(中国制造) 已经给出代码了!
      

  5.   

    搞定了,setsockopt函数,谢谢各位,马上结帖!