日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

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

發布時間:2025/3/20 C# 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c#(服务器)与java(客户端)通过socket传递对象_C#(服务器)与Java(客户端)通过Socket传递对象... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近做項目,需要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传递对象...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。