2012-10-31 14 views
0

我有一个用C#编写的桌面应用程序,它将与Android应用程序进行通信。通过tcp/ip连接在它们之间传递数据的最简单方法是什么?我对性能不太感兴趣,对易于实现更感兴趣。在C#和Android应用程序之间序列化数据的最简单方法

+1

我建议gzipstream over socket。 见: [gzipstream用于向前仅流过插座] [1] [使用GZipStream为客户机/服务器异步通信] [2] [解压缩从服务器一个压缩响应(插座)] [3] [1]:http://stackoverflow.com/questions/11050015/gzipstream-for-forward-only-stream-over-sockets [2]:HTTP://stackover流量/问题/ 7922206 /using-gzipstream-for-client-server-async-communication [3]:http://stackoverflow.com/questions/2619058/decompress-a-gzipped-response-from-the -server-socket – Cheung

+3

为了便于使用,我建议序列化为JSON或类似的并传递消息。我没有任何Android经验,但我只能假设有几十个JSON de /序列化库。 –

+0

我同意@MikeCaron。如果你不需要序列化二进制数据,JSON在Android方面非常简单。使用GSON库(Google的JSON库)。 – Shellum

回答

2

我自然不明白你的意思ease of implementation。但正如我猜测,如果你需要这些:

In [C#]:

//util function 
public static void WriteBuffer(BinaryWriter os, byte[] array) { 
      if ((array!=null) && (array.Length > 0) && (array.Length < MAX_BUFFER_SIZE)) { 
       WriteInt(os,array.Length); 
       os.Write(array); 
      } else { 
       WriteEmptyBuffer(os); 
      } 
     } 

//write a string 
public static void WriteString(BinaryWriter os, string value) { 
      if (value!=null) { 
       byte[] array = System.Text.Encoding.Unicode.GetBytes(value); 
       WriteBuffer(os,array); 
      } else { 
       WriteEmptyBuffer(os); 
      } 
     } 

In [Java] Android:

/** Read a String from the wire. Strings are represented by 
a length first, then a sequence of Unicode bytes. */ 
public static String ReadString(DataInputStream input_stream) throws IOException 
{ 
    String ret = null; 
    int len = ReadInt(input_stream); 
    if ((len == 0) || (len > MAX_BUFFER_SIZE)) { 
     ret = ""; 
    } else { 
     byte[] buffer = new byte[len]; 
     input_stream.readFully(buffer); 
     ret = new String(buffer, DATA_CHARSET); 
    } 
    return (ret); 
} 

对于进一步的结构性数据,例如,你想发送C#和Java之间的对象请使用XML Serialization in C#XML Parser in Java。你可以在互联网上搜索这些;很多例子都在Code Project网站上。

在Android中的一部分,你可以使用XStream库的易用性。

相关问题