C#(服务器)与Java(客户端)通过Socket传递对象(序列化
json)
下⾯详细讲解实现的关键步骤:
通信关键:
C#和java⽤Socket通信,发送数据和接收数据可以统⼀采⽤UTF-8编码,经过测试,使
⽤UTF-8编码可以成功传递对象。
对于Socket技术,发送数据之前,⼀般将字符串转换成字节数组,然后发送字节数组;
接收数据时,收到的也是字节数组,很多时候需要转换成字符串后使⽤。
下边是⼀些常⽤的转换。
C#语⾔字符串转换成UTF-8字节数组:
byte[] b = Encoding.UTF8.GetBytes("123");
C#语⾔UTF-8字节数组转换成字符串:
// receiveData是字节数组,receiveN是字节数组length
string removeMsg = Encoding.UTF8.GetString(receiveData, 0, receiveN);
java数组字符串转数组Java语⾔字符串转换成UTF-8字节数组:
/* strContent 是要转换的字符串*/
byte[] bs = Bytes("UTF-8");
Java语⾔UTF-8字节数组转换成字符串:
/* charArray 是UTF-8格式的字节数组,⼀般从IO流中获取的时候就指定为UTF-
8,read_rst 是字节数组length*/
String resultStr = new String(charArray, 0, read_rst);
序列化关键:
⼤家都知道,对象是保存在内存中的,具体点说是内存中的堆区。因此当我们尝试保
存、传递对象时,必须先把对象序列化,变成字符表⽰,把⽆形变成有形。
由于是跨语⾔的交互,我们即不能⽤Java特有的序列化⽅式,也不能⽤C#特有的序列化⽅式,必须⼀个通⽤的序列化格式才能交互。显然,Json是不⼆的选择。
由此可知,我们需要Json完成以下功能:
经过测试,⽤如下⽅法可实现上述转换。
C#端可以⽤开源项⽬JSON.NET,下载后根据⾃⼰的.NET版本,选择相应的Newtonsoft.Json.dll,引⽤后再添加:using Newtonsoft.Json;using
Newtonsoft.Json.Converters;即可使⽤。
C#⽤Json序列化对象⽅法:
//te是要序列化的对象;obj是对象序列化后的字符串
string obj = JsonConvert.SerializeObject(te);
C#⽤Json反序列化对象⽅法:
//TestEntity是⽬标类型;obj是经过Json序列化的对象,字符串形式
TestEntity te = JsonConvert.DeserializeObject<TestEntity>(obj);
Java端可以⽤开源项⽬google-gson,下载后是⼀个jar格式的包,直接在项⽬中导⼊这个包,并添加引⽤:le.gson.Gson;即可使⽤。
Java⽤Json序列化对象⽅法:
Gson gson = new Gson();
/*te是需要序列化的对象*/
String s = Json(te);
Java⽤Json反序列化对象⽅法:
Gson gson = new Gson();
/*s是经过Json序列化的对象,字符串类型;TestEntity是⽬标类型*/
/*注意:使⽤fromJson⽅法反序列化⼀个对象时,该对象的类型必须显⽰的声明⼀个不带参数的构造⽅法*/
TestEntity te = gson.fromJson(s,TestEntity.class);
关键的部分就这些,其他的地⽅都⾮常容易实现,⽹上有很多成熟的代码,就不赘述了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论