在 Java 中通过套接字发送数据并在 C++ 中使用 QT 套接字接收数据

Sending data over sockets in Java and receiving in C++ with QT sockets

这可能是个愚蠢的问题,但对于软件工程项目来说,需要android应用程序将数据发送到后端应用程序,然后后端应用程序将数据转发到桌面C++应用程序。 我负责编写 android 应用程序,并使用 Android Studio 和 java 编写了一个功能原型。我的桌面上有一个测试 Java 应用程序 运行,它可以作为我测试目的的后端,因为我的团队尚未开发后端或桌面应用程序。 我的队友声称我们需要使用 C++ 和 QT 重写应用程序,以便能够使用 QT 的套接字将数据从应用程序发送到 C++ 应用程序,但基于我(公认的无知)对基于套接字的网络的理解,数据应该作为字节流在套接字之间发送,因此两种语言之间的交互应该不是问题。 所以,我的问题是我是否能够在两种不同语言之间执行基于套接字的数据传输?

当然可以。据我了解您的问题,您需要一个 Qt 应用程序,它可以连接到基于 Java 的 TCP 服务器和 send/receive 数据。这在 Qt 中非常简单。其实有不同的方法。这里只有一个。

实例化一个 QTcpSocket,调用 QTcpSocket::connectToHost 使用服务器计算机的 IP 地址或 DNS 名称以及端口或服务器进程。然后调用 QTcpSocket::waitForConnected 或让自己通过使用 QTcpSocket 的 SIGNAL(connected()) 异步通知已建立的连接。如果已连接,您可以调用 QTcpSocket::write 或 QTcpSocket::read。如果你想异步读取,你可以连接到 QTcpSocket 的 SIGNAL(readyRead())。

当然,您必须就数据交换协议达成一致。最简单(而且不是很有效)是将所有内容翻译成文本,所以如果例如Java 服务器想给你发送一个数字,它只是发送一个数字的字符串表示。更复杂的数据可以打包成 XML 格式。 希望这可以帮助。

查看 https://doc.qt.io/qt-5/qtcpsocket.html or https://doc.qt.io/qt-5/qtnetwork-fortuneclient-example.html 了解更多信息。

你可以在套接字的两端有两个完全不同的接收器,一个可以是Java,而另一个可以是Qt C++或任何你喜欢的东西。这不是问题。

最大的问题是您实际上是如何沟通的——您的协议是什么?当你发送数据时,你在发送什么?例如,如果您在发送方使用丰富的 Java 序列化功能,并且只发送 Java 个对象,那么您将 非常 C++ 端。

在异构环境中,最好的选择是使用某种消息传递协议进行数据交换。如果性能不是问题,通常建议使用 Google Protocol Buffers,因为它们同时具有 Java 和 C++ 绑定。