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

时间:2012-05-16 02:21:29

标签: java c++ sockets client

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 ++服务器。

4 个答案:

答案 0 :(得分:2)

您使用的是ObjectOutputStream Java object serialisation。这不是(轻松)跨语言可移植。由于您只发送一个字符串,因此您不需要使用ObjectOutputStream - 只需使用套接字返回的OutputStream

答案 1 :(得分:0)

我强烈建议您使用某些第三方库来序列化对象。手动完成这项工作非常耗时(对您而言)并且容易出错。

我个人是Google Protocol Buffers的忠实粉丝。我几乎在所有项目中都使用它(Java服务器,.Net客户端,C ++客户端)。

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

不同语言的实施列表是 here

答案 2 :(得分:0)

您也可以在C ++端使用JNI来处理反序列化的内容。

您无法使用C ++直接反序列化Java对象。

答案 3 :(得分:0)

更新代码后不使用ObjectOutputStream,我猜你的问题是在C ++服务器上,还是因为在通过套接字传输之前没有将String转换为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();
}

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