最近做項目,需要C#與java間的交互,也就是C#編寫服務器,java編寫客戶端,讓兩者進行通信。

通信無非就是互發數據,首選Socket技術,通過TCP協議建立長連接,一般是以字節數組的形式傳遞數據,也就是說,無論傳遞什么東東,都先拆成字節數組。

既然是面向對象編程,發送的數據要用實體類封裝,同時配合List<>泛型集合,可以達到非常好的靈活性、便捷性。

廢話少說,本文的核心問題就是:C#與java如通過傳遞對象通信?

剛開始我也很迷茫,不知道這個能不能實現,但同時又很興奮,因為自己在做一件很有意思的事。經過探索研究,發現沒有問題!可行!下面分享一下!

需要用到的核心技術:

n  Socket。

n  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語言字符串轉換成UTF-8字節數組:

/* strContent 是要轉換的字符串*/

byte[] bs = strContent.getBytes("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(obj);

Java端可以用開源項目google-gson,下載后是一個jar格式的包,直接在項目中導入這個包,並添加引用:import com.google.gson.Gson;即可使用。

Java用Json序列化對象方法:

Gson gson = new Gson();

/*te是需要序列化的對象*/

String s = gson.toJson(te);

Java用Json反序列化對象方法:

Gson gson = new Gson();

/*s是經過Json序列化的對象,字符串類型;TestEntity是目標類型*/

/*注意:使用fromJson方法反序列化一個對象時,該對象的類型必須顯示的聲明一個不帶參數的構造方法*/

TestEntity te = gson.fromJson(s,TestEntity.class);

關鍵的部分就這些,其他的地方都非常容易實現,網上有很多成熟的代碼,就不贅述了。

c#(服务器)与java(客户端)通过socket传递对象_C#(服務器)與Java(客戶端)通過Socket傳遞對象...相关推荐

  1. c#(服务器)与java(客户端)通过socket传递对象_C#(服务器)与Java(客户端)通过Socket传递对象...

    最近做项目,需要C#与java间的交互,也就是C#编写服务器,java编写客户端,让两者进行通信. 通信无非就是互发数据,首选Socket技术,通过TCP协议建立长连接,一般是以字节数组的形式传递数据 ...

  2. java饥荒,饥荒DTS服務器modoverrides.lua生成工具

    这是饥荒DTS服務器modoverrides.lua生成工具,<饥荒>是由Klei制作发行的一款动作冒险类求生游戏,<饥荒>的故事讲述的饰淦髫于一名科学家被恶魔传送到了异世界荒 ...

  3. jpush java api_JPush極光推送Java服務器端API

    產品功能說明 極光推送(JPush)是一個端到端的推送服務,使得服務器端消息能夠及時地推送到終端用戶手機上,讓開發者積極地保持與用戶的連接,從而提高用戶活躍度.提高應用的留存率.極光推送客戶端支持 A ...

  4. java如何通过client客戶端http实现get/ post请求传递json参数到restful 服务接口

    一.首先在client端,导入maven相关依赖(httpclient以及json相关依赖) <dependencies><dependency><groupId> ...

  5. java ftp客戶端

    最近打算做一个android上的ftp客户端工具,网上搜索了一下,发现apache commons-net可以很方便的实现,但是这个第三方包中对文件夹的删除与创建(级联)操作并不是特别的方便.删除文件 ...

  6. java类中声明log对象_用于Android环境,java环境的log打印,可打印任何类型数据

    LogXixi 用于Android环境,java环境的log打印,可打印任何类型数据,根据android项目环境debug环境自动打开,release环境自动关闭android环境log打印,规范be ...

  7. java非闭合xml转对象,不规矩的xml与JAVA对象互相转换的小技巧-使用Marshaller

    摘要:将XML文档与JAVA对象互转是很常见的需求,如果XML定义很规整这很好实现.然而在现实中"不规矩"的XML可能更常见,Marshaller便无能为力了吗?下面是一个小技巧, ...

  8. 服务器挖chia用什么系统,Chia是什么?Chia挖矿服務器配置

    原标题:Chia是什么?Chia挖矿服務器配置 目前,租用合适的高性能Chia币服務器相对比较流行.以专门定制的硬币开采服務器为例,其中一些甚至在上架之前就被保留了.什么是Chia? Chia期待创建 ...

  9. 曙光服务器2008系统,在中科曙光I620-G20服務器上安裝Windows 2008 R2 系統步驟

    [在此處輸入文章標題] 在中科曙光I620-G20服務器上安裝Windows 2008 R2 系統步驟 1.制作啟動盤 下載windows 2008 R2系統鏡像文件.使用UltraISO(軟碟通)工 ...

最新文章

  1. 2019年值得关注的九个AI创业风口
  2. iOS进阶之协议Protocol(13)
  3. 第三讲:WCF介绍(3)
  4. POJ 1661 Help Jimmy(递推DP)
  5. 1.9 可避免误差-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授
  6. optee3.14中MMU页表查询的所需配置--深入解读
  7. 内容生态变现价值凸显,“长期主义者”触宝驶入快车道
  8. 视频号,张小龙的星辰大海
  9. java privilege的用法_java反射--注解的定义与运用以及权限拦截
  10. maven的系统变量设置
  11. frp ---- golang编写的内网穿透工具简介
  12. 引入ELK前需要知道的“坑”(上)
  13. Ubuntu Geany打开文件乱码的解决方法
  14. 分享5款提高工作效率的CAD插件,总有一款适合你
  15. 最短路:dijkstra算法
  16. 台式计算机文件打不开怎么回事,电脑文档打不开怎么办
  17. 身份证验证程序(一)
  18. ThinkBook 14 G2 ITL 重装系统 笔记
  19. Tomcat输出框乱码(鏈嶅姟鍣ㄥ湪[463]姣鍐呭垵濮嬪寲)
  20. JQueryUI自动补全 搜索提示实践

热门文章

  1. 怎样获得元气骑士的损坏的机器人_元气骑士如何修理机器人
  2. 卡莱特在创业板上市:IPO首日跌破发行价,周锦志为实际控制人
  3. Python 爬虫速成教程,还有35个实战项目送给你
  4. 强烈推荐,阿里开源的11个神级项目
  5. My加油努力--DAY01 (7/13)
  6. Qt读写文件(2种方式)实现详解
  7. Vue项目中使用AntV X6绘制流程图
  8. cad 正交使用 水平 垂直 画线
  9. 【释义】NP complete概念浅析(涵盖:P问题,NP问题,NP完全问题,NP难问题)
  10. 鸿蒙9月22日,华为鸿蒙OS或在9月22日发布,Mate30 Pro渲染图曝光,谷歌急了!