【关于QT5的有关问题】QTcpSocket 为什么一次只能读到8192个字节
【关于QT5的问题】QTcpSocket 为什么一次只能读到8192个字节?
QTcpSocket 为什么一次只能读到8192个字节?
备注:QT板块人气太差,发了都没人回,所以才来VC板块发一下,看看有没有人搞过QT,并且知道这个问题的。
示例代码如下:
MAX_BUFFER_SIZE = 16K
struct file_head 是一个文件头结构,大小是48个字节
接收端
发送端
------解决方案--------------------
系统给每个socket 有个缓冲大小 默认 你的这个是 8K
最大当然只能读完缓冲的数据,
这个缓冲大小可以用这个修改 setsockopt SO_RCVBUF 修改
------解决方案--------------------
ls答案是正确的啊,怎么会答非所问呢,你的使用setsockopt 设置缓冲区块的大小
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 修改
------解决方案--------------------
ls答案是正确的啊,怎么会答非所问呢,你的使用setsockopt 设置缓冲区块的大小