远程对象:无法使用 TCP 连接将客户端注册到注册表

问题描述

最近我一直在尝试 Qt 远程对象的功能,并希望使用注册表在主机节点和客户端节点之间建立 TCP 连接,以便客户端在主机节点上注册。 因此,我使用了官方外部架构文档中提供的代码https://doc.qt.io/qt-5/qtremoteobjects-external-schemas.html 并另外启用了服务器端主机节点的远程处理,同时我想在客户端获取 Replica 对象。

我使用了 Qt 5.12.8 和 MinGW 7.3.0 32 位

我的服务器端代码

FileManager fileManager;

const QUrl registryUrl = QUrl(QStringLiteral("tcp://serverIpAddressHere:65212"));
const QUrl extUrl = QUrl(QStringLiteral("exttcp://serverIpAddressHere:65213"));

QTcpserver tcpserver;
tcpserver.listen(QHostAddress(extUrl.host()),extUrl.port());

QRemoteObjectRegistryHost registry(registryUrl);

QRemoteObjectHost srcNode(extUrl,registryUrl,QRemoteObjectHost::AllowExternalRegistration);
srcNode.enableRemoting(&fileManager);

//Do work with fileManager

我的客户端代码

FileManager fileManager;

const QUrl registryUrl = QUrl(QStringLiteral("tcp://serverIpAddressHere:65212"));
const QUrl extUrl = QUrl(QStringLiteral("exttcp://serverIpAddressHere:65213"));

QTcpserver tcpserver;
tcpserver.listen(QHostAddress(extUrl.host()),QRemoteObjectHost::AllowExternalRegistration);
srcNode.enableRemoting(&fileManager);

//Do work with fileManager

我为我的 FileManager 类创建了一个 .rep 文件,它只是向客户端发送一些带有文件内容的信号,并希望使用 registryUrl 将每个客户端进程连接到相应的注册表。

现在我的问题是 TCP 连接似乎正常建立,因为服务器端代码批准了客户端到提供的 QTcpserver 的正确连接(QTcpserver::newConnection() 被发出),但是客户端没有使用远程对象接收提供给他的任何文件内容。请注意,进程之间的通信使用本地架构的 URL 可以正常工作,因此不使用 TCP。因此,问题必须出现在使用外部模式将客户端实际注册注册表中时。 有人看到我的代码有问题吗?无法真正找出问题,因为建立 TCP 连接的方式与文档中描述的相同。

非常感谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)