微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决远程对象:无法使用 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 举报,一经查实,本站将立刻删除。