如何将数据从 Java 客户机发送到C++服务器

How can I send data from a Java client to a C++ server?

本文关键字:C++ 服务器 客户机 Java 数据      更新时间:2023-10-16

Java 客户机可以使用 TCP 连接到C++服务器。Java 客户端位于 Win7 上。C++服务器在 Linux 上。

问题是我无法将数据成功发送到C++服务器。 Java 代码是:

public static void main (String [] args ) throws IOException {
    Socket sock = new Socket("10.217.140.200",7000); 
    String id = "TEST";
    char encoding = 'a';
    ObjectOutputStream oos = new ObjectOutputStream(sock.getOutputStream());
    oos.flush();
    oos.writeObject(encoding);

在您的帮助之后,我现在使用输出流并且可以工作。 请记住删除ObjectOutputStream oos = new ObjectOutputStream(sock.getOutputStream());否则它将向 c++ 服务器输出 4 个字符。

您正在使用执行 Java 对象序列化的 ObjectOutputStream。 这不能(容易)跨语言移植。 由于您只发送字符串,因此不需要使用ObjectOutputStream - 只需使用从套接字返回的OutputStream即可。

我强烈建议使用一些第三方库来序列化您的对象。手动执行此操作非常耗时(对您来说)且容易出错。

我个人是谷歌协议缓冲区的忠实粉丝。我几乎在所有项目(Java服务器,.Net客户端C++客户端)上都积极使用它。

这是什么?协议缓冲区是一种以高效且可扩展的格式对结构化数据进行编码的方法。Google 将协议缓冲区用于几乎所有内部 RPC 协议和文件格式。

不同语言的实现列表在这里。

你也可以

在C++端使用 JNI 来处理反序列化的东西。

不能直接使用 C++ 反序列化 Java 对象。

更新代码以不使用 ObjectOutputStream 后,我猜测您的问题要么出在C++服务器中,要么是因为在通过套接字传输之前没有将字符串转换为 ASCII。Java 字符串可以用各种编码表示,包括 Unicode。

这对你有用吗?

public static void main (String [] args ) throws IOException
{
    Socket sock = new Socket("10.217.140.200",7000);
    String id = "TEST";
    OutputStream oos = sock.getOutputStream();
    oos.write( id.getBytes("US-ASCII") );
    oos.flush();
}

如果没有,请通过编辑您的问题来发布更新的客户端和服务器端代码。