0

将 QT 从 4.8.5 升级到 5.4.0 后,我们遇到了服务器端的问题。该构建是在 Debian wheezy(64 位)和 32 位机器上完成的。当我们在 32 位机器上启动服务器时,使用命令 openssl s_client -connect xxx.xxx.xxx.xxx:4443 我们会收到带有证书的答案,但在 64 位机器下什么都没有发生,只显示“已连接”。两台机器都安装了 openssl 1.0.0e 版本,QT 是使用 web 安装程序安装的(直接复制了所需的对象,因此没有在机器上编译)。

另一件事是,在尝试在 windows7 下启动服务器时,它正在加载所需的 openssl dll(32 位)并且它可以工作。

我错过了什么吗?

PS 此外,在 64 位 linux 机器(sslechoserver 和 sslechoclient)上编译时,QT 示例也没有连接

4

1 回答 1

0

在 QTcpServer::incomingConnection 中发现了问题。在 QT5.4 上使用 qintptr 作为 socketDescriptor。此类型保证与 Qt 支持的所有平台上的指针大小相同。在具有 32 位指针的系统上,qintptr 是 qint32 的 typedef;在具有 64 位指针的系统上,qintptr 是 qint64 的 typedef。

这就是为什么它在 32 位而不是 64 位机器上工作的原因。(纯属运气)

于 2015-03-06T15:28:14.207 回答