繁体   English   中英

将整数从C中的TCP套接字发送到Qt TCP套接字

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM