[英]Send integer from TCP socket in C to Qt TCP socket
我目前正在尝试使用TCP套接字实现基本的客户端-服务器文件传输程序。 客户端是用C ++ / Qt编写的,服务器是用C语言编写的。尝试将文件大小从服务器发送到客户端(整数值)时遇到了很大的困难。 下面是代码示例。
C服务器:
if(fileExists == '1')
{
fp = fopen(filename, "r");
fseek(fp, 0L, SEEK_END);
fileSize = ftell(fp);
printf("%d\n", fileSize);
send(client_socket, &fileSize, sizeof(fileSize), 0);
}
Qt客户端:
void Client::receiveFile(QString filename)
{
qint32 fileSize;
clientSocket->waitForReadyRead(1000);
clientSocket->read(fileSize);
qDebug() << fileSize;
}
问题是C正确地计算出文件大小为40435408,并将其发送给客户端,该文件的大小为32767。显然问题出在客户端。 我几乎一整天都想找出问题所在,但失败了。 我意识到这是我犯的一些简单而愚蠢的错误,对于提出这样愚蠢的问题我深表歉意。 我是一个完整的初学者。 有人可以帮忙吗?
当您调用clientSocket->read(fileSize);
,实际上是在调用QByteArray QIODevice::read(qint64 maxSize)
。 这意味着您正在从TCP套接字读取最多undefined
的字节数(因为未初始化fileSize
),并且由于不使用返回值fileSize
即将其丢弃。
我认为您正在尝试使用qint64 QIODevice::read(char *data, qint64 maxSize)
,因此您的代码应如下所示:
qint32 fileSize = 0;
clientSocket->waitForReadyRead(1000);
if (clientSocket->bytesAvailable() >= sizeof(fileSize)) {
clientSocket->read(&fileSize, sizeof(fileSize));
} else {
qWarning() < "Only received" << clientSocket->bytesAvailable() << "bytes: " << clientSocket->readAll().toHex(' ');
}
qDebug() << fileSize;
请注意,我不会在超出概念证明的任何软件中使用此代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.