999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Socket實現Android(java)與C#的同步通信

2015-04-02 14:03:22何誠等
無線互聯科技 2015年2期

何誠等

摘 要:基于Socket的通信機制,闡述了Java和C#語言通過Socket編程來互相通信的步驟,并給出了一種C/S模式的Socket通信系統框架,該框架解決了通過USB連接的安卓應用和Windows桌面應用之間通信的問題,達到了不同平臺下文件和不同語言的對象的互傳。

關鍵詞:Socket編程;Java;C#;Json;數據同步

1 引言

隨著Android智能手機市場的擴大,基于Android系統的應用程序也越來越多。Android程序多以Java語言為基礎進行開發,而在Windows平臺上,c#已經成為開發桌面程序的主流平臺。在一些應用場景中,需要Android設備與裝有Windows系統的計算機通過USB連接,用C#編寫客戶端,java編寫服務器,實現跨平臺的通信。

而標準的Socket方法可以實現任何平臺和任何進程之間的Socket通信,在PC和Android手機通過USB連接的情況下,可用Android系統的ADB工具進行端口的轉發,從而使兩端設備的Socket連通。

2 實現通信的關鍵技術

基于以下技術,實現滿足需求的Socket通信系統框架:

2.1 Socket通信技術

Socket是一種套接字規范,利用客戶/服務器模式,解決了進程之間建立通信連接的問題。安裝了TCP協議軟件和實現了套接字規范的設備之間即可通過Socket進行通信。套接字之間連接的過程需要經過這三個步驟:服務端開啟監聽,客戶端發出請求,服務端通過監聽收到請求后再確認連接。兩端連接上后即可進行數據傳輸的操作。

Socket有兩種操作方式,一種使用TCP協議,在本系統中要求數據傳輸的準確性,因此采取使用TCP協議的來傳輸數據的方法。

2.2 C#中的套接字編程

Microsoft.Net.Framework的名字空間System.Net和System.Net.Socket包含豐富用以網絡編程的類,其中Socket類為實現套接字網絡編程提供了大量方法。

通過Encoding.UTF8.GetBytes(String),C#可以將將字符串轉換為UTF-8字節數組,通過Encoding.UTF8.GetString(bytes[],0,Length)將UTF-8字節數組轉換為字符串。

在創建Socket對象后,可通過Send方法發送字節數組形式的數據,或使用Receive方法接收字節數組數據,再用以上方法轉換為相應字符串進行處理。

2.3 Java中的套接字編程

Java在包java.net中提供了兩個類,Socket和ServerSocket。服務端和客戶端之間先建立Socket之間的連接,之后進行通信。在服務端新建ServerSocket對象,循環執行accept方法來監聽設備指定的端口,當客戶端有Socket來連接它時,它會接受該Socket的連接請求,同時在服務端建立一個對應的Socket對象并和它進行通信。這樣兩邊各一個互相連接的Socket對象,通過兩個socket傳遞數據實現了通信。

Java同樣提供了字節數組和字符串之間的進行轉換的方法,將字節數組轉換為字符串的過程如下:

String string = new String(charArray, 0, length);

字符串轉換為字節數組的過程如下:

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

2.4 用Json將對象序列化

除了傳輸文件數據外,在面向對象編程中,發送的數據要用實體類封裝,將封裝的對象存入List()泛型集合中,可以通過序列化List對象來靈活的封裝和傳遞大量數據。

因為跨語言的需要,用Java或C#一方自己的序列化方式是行不通的,而Json提供了一個通用的序列化格式。

C#可以用開源的項目JSON.NET,在項目中添加引用:using Newtonsoft.Json;和using Newtonsoft.Json.Converters即可使用以下方法:

序列化:

JsonConvert.SerializeObject(string);

反序列化:

JsonConvert.DeserializeObject(obj);

Java可以用開源項目google-gson,在項目中導入這個項目的第三方jar包,然后添加引用:import com.google.gson.Gson;就可使用以下方法:

序列化:

Gson gson=new Gson();

String s=gson.toJson(obj);

反序列化:

Gson gson=new Gson();

Object obj=gson.fromJson(s,Object.class);

2.5 C#啟動cmd調用Android系統的調試工具ADB

通過C#名字空間System.Diagnostics提供的Process類調用Windows系統

的cmd.exe,在USB連接的情況下,執行“adb forward tcp:12581 tcp:10087”命令轉發端口信息,并通過“adb shell am broadcast -a”命令發送一個廣播給Android應用程序,以啟動Android程序相應的service,在service中編寫socket實現通信。

3 數據同步方法實現流程

根據以上列舉的關鍵技術來設計一個實現Android應用程序和桌面程序通信的模型,分為C#客戶端和Java服務端兩部分:

3.1 客戶端程序編寫流程如下

⑴C#通過ADB發送Android系統的BroadCast廣播,來啟動Android的Service后臺程序。

⑵新建一個Socket對象,Android默認手機端的IP為“127.0.0.1”,因此以“127.0.0.1”和指定的端口號為參數,執行該對象的Connect方法。

⑶發送對象時將要傳遞的對象用Json序列化函數JsonConvert.SerializeObject()序列化為字符串,再將字符串轉換為字節數組,最后通過Socket對象的Send方法發送數據。

⑷接收數據時執行Socket對象的Receive方法,將得到的字節數組轉換為字符串,再用JsonConvert.DeserializeObject()方法反序列化字符串得到對象。

⑸程序關閉時執行Socket對象的close()方法關閉socket連接,并發送關閉service的廣播。

3.2 服務端程序編寫流程如下

⑴編寫一個Android端繼承了Service類的后臺運行的程序,作為服務器端,再編寫一個繼承BroadcastReceiver類的程序來接收廣播,當接收到客戶端發來的廣播時來打開或關閉Service。

⑵Service啟動的時候以固定端口號作為參數新建一個SocketServer的對象,當有客戶端的socket連接時,通過SocketServer的accept方法新建Socket類的對象。

⑶新建BufferedOutputStream對象來發送Socket要發送的數據,新建BufferedInputStream對象來接收Socket對象接收的的數據。

⑷新建Gson對象,執行該對象的序列化和反序列化方法,將要發送的數據轉換為字節數組,將接收的字節數組轉換為對象。

⑸Service關閉時關閉通訊流和Socket。

4 結語

給出了解決C#平臺和基于java的Android平臺的同步通信的一個方案,總結了實現該方案所用到的技術基礎,即Java和c#系統具有基于Socket的靈活通信機制,并在格式方面可以通過Json進行轉換。

[參考文獻]

[1]周培.基于Socket的即時通信系統的研究與實現[D].廣州:華南大學,2010.

[2]李楊,耿昌宇,張麗芬.基于Socket通訊模式下的跨平臺數據同步[J].北京理工大學學報,2002(2).

[3]米洪,鄭瑩.基于SOCKET和JNI的Java與C++通信對比研究[J].軟件導刊,2009(1).

主站蜘蛛池模板: 亚洲美女久久| 老司机精品一区在线视频| 亚洲第一成年免费网站| 色哟哟色院91精品网站| 国产高清在线观看91精品| 日韩一区二区在线电影| 欧美成人h精品网站| 欧美亚洲欧美| 久草视频精品| 国产精品夜夜嗨视频免费视频| 精品伊人久久久大香线蕉欧美| 日本a级免费| 综合色亚洲| jijzzizz老师出水喷水喷出| 国产区免费| 久久一本日韩精品中文字幕屁孩| 秋霞国产在线| 国产欧美日韩18| 亚洲无码高清免费视频亚洲| yy6080理论大片一级久久| 久久国产精品影院| 一级毛片免费高清视频| 九九免费观看全部免费视频| 视频国产精品丝袜第一页| 性色一区| 久久精品国产精品一区二区| 久久综合婷婷| 高清无码一本到东京热 | 亚洲男人的天堂久久香蕉| 黄色污网站在线观看| 一本大道东京热无码av| 日本人妻一区二区三区不卡影院 | 久久国产毛片| 高清色本在线www| 久久精品国产91久久综合麻豆自制| 国产在线91在线电影| 亚洲日韩AV无码一区二区三区人| 色播五月婷婷| 伊人色天堂| 亚洲视频一区| 久久这里只有精品8| 久久精品午夜视频| 国产区在线观看视频| 亚洲成A人V欧美综合| 国产亚洲视频中文字幕视频| 国产黄在线免费观看| 秋霞午夜国产精品成人片| 国内黄色精品| 午夜国产不卡在线观看视频| 波多野结衣在线一区二区| 国产情侣一区| 久99久热只有精品国产15| 精品成人一区二区三区电影| 中文字幕在线不卡视频| 亚洲欧美自拍一区| 国产www网站| 久久天天躁夜夜躁狠狠| 综合久久五月天| 日韩成人在线视频| 久久综合色视频| 麻豆国产在线观看一区二区| 精品国产毛片| 天堂成人在线视频| 国产精品第5页| 九色综合伊人久久富二代| 2019年国产精品自拍不卡| 人妖无码第一页| 精品国产一区二区三区在线观看| 欧美黄网在线| 日韩经典精品无码一区二区| 久久人妻系列无码一区| 美女视频黄频a免费高清不卡| 亚洲欧美日韩中文字幕在线一区| 在线观看国产小视频| 日韩第一页在线| 日本亚洲国产一区二区三区| 欧美一区二区啪啪| 中国黄色一级视频| 国产超薄肉色丝袜网站| 欧美A级V片在线观看| 亚洲V日韩V无码一区二区| 狠狠色香婷婷久久亚洲精品|