【关于QT5的有关问题】QTcpSocket 为什么一次只能读到8192个字节

【关于QT5的问题】QTcpSocket 为什么一次只能读到8192个字节?
QTcpSocket 为什么一次只能读到8192个字节?

备注:QT板块人气太差,发了都没人回,所以才来VC板块发一下,看看有没有人搞过QT,并且知道这个问题的。


示例代码如下:

MAX_BUFFER_SIZE = 16K
struct file_head 是一个文件头结构,大小是48个字节

接收端

if (m_client->bytesAvailable() > 0)
{
QByteArray buffer = m_client->read(MAX_BUFFER_SIZE));
        //这里的这个buffer总是8192,为什么?
}


发送端

int FileSender::sendFile(QString strFilePath, QString strFileName)
{
//打开文件
QFile file(strFilePath);
if (file.open(QIODevice::ReadOnly) == false)
{
return -1;
}

//分配缓冲区
struct file_head *head = (struct file_head*)malloc(MAX_BUFFER_SIZE);
if (head == NULL)
{
return -1;
}

//获得缓冲区指针
char *pdata = head->data;
int datalen = MAX_BUFFER_SIZE - sizeof(struct file_head);

//设置数据头中不变的部分
memset(head, 0, sizeof(struct file_head));
strcpy(head->filename, strFileName.toLatin1().data());
head->totallen = file.size();

//获取数据
unsigned int len = 0, offset = 0;
while ((len = file.read(pdata, datalen)) > 0)
{
head->offset  = offset;
head->datalen = len;
offset += len;
write((char*)head, sizeof(struct file_head) + len);
flush();
waitForBytesWritten();
//通知进度
emit writeChanged(strFilePath, ((double)(head->offset + head->datalen) / head->totallen) * 100);
}
file.close();
free(head);

return 0;
}

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

------解决方案--------------------
引用:
Quote: 引用:

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

答非所问,但是也要感谢之


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