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