簡體   English   中英

通過TCP將對象(類)從C#客戶端發送到Java服務器

[英]Send Object (Class) from C# Client to Java Server over 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)

我已經用谷歌搜索了,但是沒有找到我的問題的確切答案。 我已經使用xml序列化器序列化了我的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();
}

感謝您的任何答案。 任何幫助表示贊賞。

Java二進制序列化和.NET XML序列化彼此不兼容。 Java二進制序列化與其自身兼容,僅此而已。 您需要選擇一種可以同時被序列化和反序列化的通用格式。 一些示例可能包括某種形式的XML或JSON或BSON,Google Protobuf等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM