我怎样才能从Java客户端将数据发送到一个C ++服务器?(How can I send data

2019-10-16 17:40发布

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);

你的善良帮助后,我现在用的OutputStream和它的作品。 记住要删除ObjectOutputStream oos = new ObjectOutputStream(sock.getOutputStream()); 否则它会输出4个字符到C ++服务器。

Answer 1:

您使用的ObjectOutputStream ,这确实Java对象序列化 。 这不是(容易),跨语言的便携。 既然你只发送一个字符串,你并不需要使用ObjectOutputStream -只是使用OutputStream从插座返回。



Answer 2:

我强烈建议使用一些第三方库的对象的序列化。 做手工是非常耗时的,(你),而且容易出错。

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

它是什么? 协议缓冲器处于高效而可扩展的格式编码的结构化数据的方法。 谷歌使用协议缓冲器,用于几乎所有的内部RPC协议和文件格式。

针对不同的语言实现的名单是在这里



Answer 3:

你也可以使用JNI在C ++方面应对反序列化的东西。

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



Answer 4:

更新你的代码不使用的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();
}

如果没有,请通过编辑您的问题张贴两个更新的客户端和服务器端代码。



文章来源: How can I send data from a Java client to a C++ server?