簡體   English   中英

將對象從Android客戶端應用程序發送到C#Server App

[英]Sending object from Android Client App to C# Server App

Java代碼:

public class EMessage implements Serializable
{

private Bitmap image;

private String type;

EMessage()

{}

}
...

EMessage eMessage=new EMessage();

outToServer = new DataOutputStream(clientSocket.getOutputStream());

objectOutputStream=new ObjectOutputStream(outToServer);

objectOutputStream.writeObject(eMessage);

C#代碼:

[Serializable]

class EMessage

{

    private Bitmap image;

    private String type;

    EMessage()

    { }

}

client = server.AcceptTcpClient();

 Connected = client.Connected;

            ns = client.GetStream();
 IFormatter formatter = new 

 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();

 EMessage recievedmsg = (EMessage)formatter.Deserialize(ns);

當我從Android客戶端應用程序(Java編碼)發送一個對象,我收到C#Server App中的對象,但有一個例外。 “輸入流不是有效的二進制格式。起始內容(以字節為單位)為:00-05-73-72-00-1D-63-6F-6D-2E等”; 請提出任何簡單的解決方案 我的項目並不復雜。 我只需要發送一個EMessage對象。

序列化格式特定於平台,Java和.NET序列化彼此不兼容。 改為使用JSON(並且它也更容易調試)。

為什么不使用SOAP,這里有一篇關於你正在做什么的文章(android到.net)

http://www.codeproject.com/Articles/29305/Consuming-NET-Web-Services-via-the-kSOAP-library

我建議您出於上述原因(Java序列化與C#序列化不同)刪除Serialization化,並在普通字節數組中在Java和C#應用程序之間傳輸數據。

您可以將Bitmap圖像轉換為類似的字節數組( 取自SO上的這篇文章 ):

Bitmap bmp = intent.getExtras().get("data");
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();

當然,如果情況需要,您可以更改CompressFormat 之后,您也可以將type字符串轉換為字節數組,並在其末尾添加一個null終止符。

一旦你在那里,你可以先發送你的type字符串,然后在它之后添加位圖的字節數組。 在C#端,您可以讀取傳入的數據,直到到達0終止符,此時您將知道您已讀取EMessage對象的字符串部分,然后讀取您發送的其余字節並將它們解析為Bitmap對象。

這樣你就可以確定在Java和C#實現之間,你不會遇到任何兼容性問題。 它可能需要更多的代碼和更多的理解,但它比兩種語言之間的序列化更可靠。

暫無
暫無

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

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