系统给每个socket 有个缓冲大小 默认 你的这个是 8K
最大当然只能读完缓冲的数据,
这个缓冲大小可以用这个修改  setsockopt   SO_RCVBUF 修改

解决方案 »

  1.   

    答非所问,但是也要感谢之ls答案是正确的啊,怎么会答非所问呢,你的使用setsockopt 设置缓冲区块的大小
      

  2.   

    答非所问,但是也要感谢之ls答案是正确的啊,怎么会答非所问呢,你的使用setsockopt 设置缓冲区块的大小
    首先,原生QT中不支持这个选项的设置(猜测是不是因为跨平台的缘故)
    其次,我通过API调用去设置接收缓冲区大小为64K后,我发送16K,但是我read到的数据却只有8796个字节。所有,应该有更深层的问题,导致的这个结果,期待更好的答案
      

  3.   


    if (m_client->bytesAvailable() > 8192)
    {
        QByteArray buffer = m_client->read(MAX_BUFFER_SIZE));
        //......
    }
      

  4.   

    enum QAbstractSocket::SocketError
    QAbstractSocket::DatagramTooLargeError 6
    The datagram was larger than the operating system's limit (which can be as low as 8192 bytes).