2014-10-03 119 views
-1

我想通過TCP連接發送一個對象從C#到Java,但它不起作用。 java的告訴我有一個錯誤,我不知道爲什麼通過TCP從C#客戶端發送對象(類)到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) 

我GOOGLE了它已經找到,但我的問題沒有確切的答案。我已經使用和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(); 
} 

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

回答

3

Java二進制序列化和.NET XML序列化彼此不兼容。 Java二進制序列化與它本身是兼容的,這就是它。你需要選擇一個可以被兩個序列化和反序列化的通用格式。一些例子可能包括一些XML或JSON或BSON,Google Protobuf等的味道。

+0

好吧,謝謝你:)。我想我會用JSON或XML去 – 2014-10-03 17:07:43

相關問題