通过TCP将对象(类)从C#Client发送到Java Server

时间:2014-10-03 16:58:07

标签: java c# serialization tcp

我试图通过TCP连接将对象从c#发送到java,但它不起作用。 Java告诉我有一个错误,我不知道为什么

java.io.StreamCorruptedException: invalid stream header: 3C3F786D
    at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
    at java.io.ObjectInputStream.<init>(Unknown Source)
    at ClientThread.run(ClientThread.java:34)
    at java.lang.Thread.run(Unknown Source)

我已经搜索过了,但没有找到我问题的确切答案。我用cml序列化器序列化了我的c#类。我在互联网上找到了代码。

这是c#代码

        var cmd = new Command();
        cmd.setType(5);

        var xmlSerializer = new XmlSerializer(typeof(Command));

        using (var memoryStream = new MemoryStream())
        {
            xmlSerializer.Serialize(memoryStream, cmd);
        }

        String sendMsg = message + ";";
        try
        {
            if (tcp_stream.CanWrite)
            {
                xmlSerializer.Serialize(tcp_stream, cmd);
            }
            tcp_stream.Flush();
        }
        catch (Exception exception)
        {
            MessageBox.Show("Error..... " + exception);
        }

Java服务器代码是

try {

    ObjectOutputStream sOutput = new ObjectOutputStream(socket.getOutputStream());
    ObjectInputStream sInput = new ObjectInputStream(
    socket.getInputStream());
    this.message = (Message) sInput.readObject();
    System.out.println("MessageType: " + this.message.getType());
}
catch (IOException e) {
    System.out.println("Can not get message. " + e.getMessage());
    e.printStackTrace();
    break;
}
catch (ClassNotFoundException e) {
    e.printStackTrace();
}

感谢您的回答。 任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:4)

Java二进制序列化和.NET XML序列化彼此不兼容。 Java二进制序列化与自身兼容,就是这样。您需要选择一种可以通过两者进行序列化和反序列化的通用格式。一些示例可能包括一些XML或JSON或BSON,Google Protobuf等。