日本好好热aⅴ|国产99视频精品免费观看|日本成人aV在线|久热香蕉国产在线

  • <cite id="ikgdy"><table id="ikgdy"></table></cite>
    1. 西西軟件下載最安全的下載網(wǎng)站、值得信賴的軟件下載站!

      首頁編程開發(fā)java → Java客戶端與C#服務(wù)器通過Socket傳遞對象

      Java客戶端與C#服務(wù)器通過Socket傳遞對象

      相關(guān)軟件相關(guān)文章發(fā)表評論 來源:西西整理時間:2012/12/23 9:06:36字體大。A-A+

      作者:西西點擊:0次評論:0次標簽: Socket

      • 類型:服務(wù)器區(qū)大。21KB語言:中文 評分:6.6
      • 標簽:
      立即下載

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

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

      既然是面向?qū)ο缶幊蹋l(fā)送的數(shù)據(jù)要用實體類封裝,同時配合List<>泛型集合,可以達到非常好的靈活性、便捷性。

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

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

      需要用到的核心技術(shù):

      n Socket。

      n Json。

      下面詳細講解實現(xiàn)的關(guān)鍵步驟:

      通信關(guān)鍵:

      C#和java用Socket通信,發(fā)送數(shù)據(jù)和接收數(shù)據(jù)可以統(tǒng)一采用UTF-8編碼,經(jīng)過測試,使用UTF-8編碼可以成功傳遞對象。

      對于Socket技術(shù),發(fā)送數(shù)據(jù)之前,一般將字符串轉(zhuǎn)換成字節(jié)數(shù)組,然后發(fā)送字節(jié)數(shù)組;接收數(shù)據(jù)時,收到的也是字節(jié)數(shù)組,很多時候需要轉(zhuǎn)換成字符串后使用。

      下邊是一些常用的轉(zhuǎn)換。

      C#語言字符串轉(zhuǎn)換成UTF-8字節(jié)數(shù)組:

      byte[] b = Encoding.UTF8.GetBytes("123");

      C#語言UTF-8字節(jié)數(shù)組轉(zhuǎn)換成字符串:

      // receiveData是字節(jié)數(shù)組,receiveN是字節(jié)數(shù)組length

      string removeMsg = Encoding.UTF8.GetString(receiveData, 0, receiveN);

      Java語言字符串轉(zhuǎn)換成UTF-8字節(jié)數(shù)組:

      /* strContent 是要轉(zhuǎn)換的字符串*/

      byte[] bs = strContent.getBytes("UTF-8");

      Java語言UTF-8字節(jié)數(shù)組轉(zhuǎn)換成字符串:

      /* charArray 是UTF-8格式的字節(jié)數(shù)組,一般從IO流中獲取的時候就指定為UTF-8,read_rst 是字節(jié)數(shù)組length*/

      String resultStr = new String(charArray, 0, read_rst);

      序列化關(guān)鍵:

      大家都知道,對象是保存在內(nèi)存中的,具體點說是內(nèi)存中的堆區(qū)。因此當我們嘗試保存、傳遞對象時,必須先把對象序列化,變成字符表示,把無形變成有形。

      由于是跨語言的交互,我們即不能用Java特有的序列化方式,也不能用C#特有的序列化方式,必須找一個通用的序列化格式才能交互。顯然,Json是不二的選擇。

      由此可知,我們需要Json完成以下功能:

      經(jīng)過測試,用如下方法可實現(xiàn)上述轉(zhuǎn)換。

      C#端可以用開源項目JSON.NET,下載后根據(jù)自己的.NET版本,選擇相應(yīng)的Newtonsoft.Json.dll,引用后再添加:using Newtonsoft.Json;using Newtonsoft.Json.Converters;即可使用。

      C#用Json序列化對象方法:

      //te是要序列化的對象;obj是對象序列化后的字符串

      string obj = JsonConvert.SerializeObject(te);

      C#用Json反序列化對象方法:

      //testEntity是目標類型;obj是經(jīng)過Json序列化的對象,字符串形式

      TestEntity te = JsonConvert.DeserializeObject<TestEntity>(obj);

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

      Java用Json序列化對象方法:

      Gson gson = new Gson();

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

      String s = gson.toJson(te);

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

      Gson gson = new Gson();

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

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

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

      關(guān)鍵的部分就這些,其他的地方都非常容易實現(xiàn),網(wǎng)上有很多成熟的代碼,就不贅述了。

        相關(guān)評論

        閱讀本文后您有什么感想? 已有人給出評價!

        • 8 喜歡喜歡
        • 3 頂
        • 1 難過難過
        • 5 囧
        • 3 圍觀圍觀
        • 2 無聊無聊

        熱門評論

        最新評論

        發(fā)表評論 查看所有評論(0)

        昵稱:
        表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
        字數(shù): 0/500 (您的評論需要經(jīng)過審核才能顯示)
        推薦文章

        沒有數(shù)據(jù)