亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Socket實(shí)現(xiàn)Android(java)與C#的同步通信

        2015-04-02 14:03:22何誠(chéng)等
        無(wú)線互聯(lián)科技 2015年2期

        何誠(chéng)等

        摘 要:基于Socket的通信機(jī)制,闡述了Java和C#語(yǔ)言通過(guò)Socket編程來(lái)互相通信的步驟,并給出了一種C/S模式的Socket通信系統(tǒng)框架,該框架解決了通過(guò)USB連接的安卓應(yīng)用和Windows桌面應(yīng)用之間通信的問(wèn)題,達(dá)到了不同平臺(tái)下文件和不同語(yǔ)言的對(duì)象的互傳。

        關(guān)鍵詞:Socket編程;Java;C#;Json;數(shù)據(jù)同步

        1 引言

        隨著Android智能手機(jī)市場(chǎng)的擴(kuò)大,基于Android系統(tǒng)的應(yīng)用程序也越來(lái)越多。Android程序多以Java語(yǔ)言為基礎(chǔ)進(jìn)行開(kāi)發(fā),而在Windows平臺(tái)上,c#已經(jīng)成為開(kāi)發(fā)桌面程序的主流平臺(tái)。在一些應(yīng)用場(chǎng)景中,需要Android設(shè)備與裝有Windows系統(tǒng)的計(jì)算機(jī)通過(guò)USB連接,用C#編寫(xiě)客戶端,java編寫(xiě)服務(wù)器,實(shí)現(xiàn)跨平臺(tái)的通信。

        而標(biāo)準(zhǔn)的Socket方法可以實(shí)現(xiàn)任何平臺(tái)和任何進(jìn)程之間的Socket通信,在PC和Android手機(jī)通過(guò)USB連接的情況下,可用Android系統(tǒng)的ADB工具進(jìn)行端口的轉(zhuǎn)發(fā),從而使兩端設(shè)備的Socket連通。

        2 實(shí)現(xiàn)通信的關(guān)鍵技術(shù)

        基于以下技術(shù),實(shí)現(xiàn)滿足需求的Socket通信系統(tǒng)框架:

        2.1 Socket通信技術(shù)

        Socket是一種套接字規(guī)范,利用客戶/服務(wù)器模式,解決了進(jìn)程之間建立通信連接的問(wèn)題。安裝了TCP協(xié)議軟件和實(shí)現(xiàn)了套接字規(guī)范的設(shè)備之間即可通過(guò)Socket進(jìn)行通信。套接字之間連接的過(guò)程需要經(jīng)過(guò)這三個(gè)步驟:服務(wù)端開(kāi)啟監(jiān)聽(tīng),客戶端發(fā)出請(qǐng)求,服務(wù)端通過(guò)監(jiān)聽(tīng)收到請(qǐng)求后再確認(rèn)連接。兩端連接上后即可進(jìn)行數(shù)據(jù)傳輸?shù)牟僮鳌?/p>

        Socket有兩種操作方式,一種使用TCP協(xié)議,在本系統(tǒng)中要求數(shù)據(jù)傳輸?shù)臏?zhǔn)確性,因此采取使用TCP協(xié)議的來(lái)傳輸數(shù)據(jù)的方法。

        2.2 C#中的套接字編程

        Microsoft.Net.Framework的名字空間System.Net和System.Net.Socket包含豐富用以網(wǎng)絡(luò)編程的類,其中Socket類為實(shí)現(xiàn)套接字網(wǎng)絡(luò)編程提供了大量方法。

        通過(guò)Encoding.UTF8.GetBytes(String),C#可以將將字符串轉(zhuǎn)換為UTF-8字節(jié)數(shù)組,通過(guò)Encoding.UTF8.GetString(bytes[],0,Length)將UTF-8字節(jié)數(shù)組轉(zhuǎn)換為字符串。

        在創(chuàng)建Socket對(duì)象后,可通過(guò)Send方法發(fā)送字節(jié)數(shù)組形式的數(shù)據(jù),或使用Receive方法接收字節(jié)數(shù)組數(shù)據(jù),再用以上方法轉(zhuǎn)換為相應(yīng)字符串進(jìn)行處理。

        2.3 Java中的套接字編程

        Java在包java.net中提供了兩個(gè)類,Socket和ServerSocket。服務(wù)端和客戶端之間先建立Socket之間的連接,之后進(jìn)行通信。在服務(wù)端新建ServerSocket對(duì)象,循環(huán)執(zhí)行accept方法來(lái)監(jiān)聽(tīng)設(shè)備指定的端口,當(dāng)客戶端有Socket來(lái)連接它時(shí),它會(huì)接受該Socket的連接請(qǐng)求,同時(shí)在服務(wù)端建立一個(gè)對(duì)應(yīng)的Socket對(duì)象并和它進(jìn)行通信。這樣兩邊各一個(gè)互相連接的Socket對(duì)象,通過(guò)兩個(gè)socket傳遞數(shù)據(jù)實(shí)現(xiàn)了通信。

        Java同樣提供了字節(jié)數(shù)組和字符串之間的進(jìn)行轉(zhuǎn)換的方法,將字節(jié)數(shù)組轉(zhuǎn)換為字符串的過(guò)程如下:

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

        字符串轉(zhuǎn)換為字節(jié)數(shù)組的過(guò)程如下:

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

        2.4 用Json將對(duì)象序列化

        除了傳輸文件數(shù)據(jù)外,在面向?qū)ο缶幊讨?,發(fā)送的數(shù)據(jù)要用實(shí)體類封裝,將封裝的對(duì)象存入List()泛型集合中,可以通過(guò)序列化List對(duì)象來(lái)靈活的封裝和傳遞大量數(shù)據(jù)。

        因?yàn)榭缯Z(yǔ)言的需要,用Java或C#一方自己的序列化方式是行不通的,而Json提供了一個(gè)通用的序列化格式。

        C#可以用開(kāi)源的項(xiàng)目JSON.NET,在項(xiàng)目中添加引用:using Newtonsoft.Json;和using Newtonsoft.Json.Converters即可使用以下方法:

        序列化:

        JsonConvert.SerializeObject(string);

        反序列化:

        JsonConvert.DeserializeObject(obj);

        Java可以用開(kāi)源項(xiàng)目google-gson,在項(xiàng)目中導(dǎo)入這個(gè)項(xiàng)目的第三方j(luò)ar包,然后添加引用: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#啟動(dòng)cmd調(diào)用Android系統(tǒng)的調(diào)試工具ADB

        通過(guò)C#名字空間System.Diagnostics提供的Process類調(diào)用Windows系統(tǒng)

        的cmd.exe,在USB連接的情況下,執(zhí)行“adb forward tcp:12581 tcp:10087”命令轉(zhuǎn)發(fā)端口信息,并通過(guò)“adb shell am broadcast -a”命令發(fā)送一個(gè)廣播給Android應(yīng)用程序,以啟動(dòng)Android程序相應(yīng)的service,在service中編寫(xiě)socket實(shí)現(xiàn)通信。

        3 數(shù)據(jù)同步方法實(shí)現(xiàn)流程

        根據(jù)以上列舉的關(guān)鍵技術(shù)來(lái)設(shè)計(jì)一個(gè)實(shí)現(xiàn)Android應(yīng)用程序和桌面程序通信的模型,分為C#客戶端和Java服務(wù)端兩部分:

        3.1 客戶端程序編寫(xiě)流程如下

        ⑴C#通過(guò)ADB發(fā)送Android系統(tǒng)的BroadCast廣播,來(lái)啟動(dòng)Android的Service后臺(tái)程序。

        ⑵新建一個(gè)Socket對(duì)象,Android默認(rèn)手機(jī)端的IP為“127.0.0.1”,因此以“127.0.0.1”和指定的端口號(hào)為參數(shù),執(zhí)行該對(duì)象的Connect方法。

        ⑶發(fā)送對(duì)象時(shí)將要傳遞的對(duì)象用Json序列化函數(shù)JsonConvert.SerializeObject()序列化為字符串,再將字符串轉(zhuǎn)換為字節(jié)數(shù)組,最后通過(guò)Socket對(duì)象的Send方法發(fā)送數(shù)據(jù)。

        ⑷接收數(shù)據(jù)時(shí)執(zhí)行Socket對(duì)象的Receive方法,將得到的字節(jié)數(shù)組轉(zhuǎn)換為字符串,再用JsonConvert.DeserializeObject()方法反序列化字符串得到對(duì)象。

        ⑸程序關(guān)閉時(shí)執(zhí)行Socket對(duì)象的close()方法關(guān)閉socket連接,并發(fā)送關(guān)閉service的廣播。

        3.2 服務(wù)端程序編寫(xiě)流程如下

        ⑴編寫(xiě)一個(gè)Android端繼承了Service類的后臺(tái)運(yùn)行的程序,作為服務(wù)器端,再編寫(xiě)一個(gè)繼承BroadcastReceiver類的程序來(lái)接收廣播,當(dāng)接收到客戶端發(fā)來(lái)的廣播時(shí)來(lái)打開(kāi)或關(guān)閉Service。

        ⑵Service啟動(dòng)的時(shí)候以固定端口號(hào)作為參數(shù)新建一個(gè)SocketServer的對(duì)象,當(dāng)有客戶端的socket連接時(shí),通過(guò)SocketServer的accept方法新建Socket類的對(duì)象。

        ⑶新建BufferedOutputStream對(duì)象來(lái)發(fā)送Socket要發(fā)送的數(shù)據(jù),新建BufferedInputStream對(duì)象來(lái)接收Socket對(duì)象接收的的數(shù)據(jù)。

        ⑷新建Gson對(duì)象,執(zhí)行該對(duì)象的序列化和反序列化方法,將要發(fā)送的數(shù)據(jù)轉(zhuǎn)換為字節(jié)數(shù)組,將接收的字節(jié)數(shù)組轉(zhuǎn)換為對(duì)象。

        ⑸Service關(guān)閉時(shí)關(guān)閉通訊流和Socket。

        4 結(jié)語(yǔ)

        給出了解決C#平臺(tái)和基于java的Android平臺(tái)的同步通信的一個(gè)方案,總結(jié)了實(shí)現(xiàn)該方案所用到的技術(shù)基礎(chǔ),即Java和c#系統(tǒng)具有基于Socket的靈活通信機(jī)制,并在格式方面可以通過(guò)Json進(jìn)行轉(zhuǎn)換。

        [參考文獻(xiàn)]

        [1]周培.基于Socket的即時(shí)通信系統(tǒng)的研究與實(shí)現(xiàn)[D].廣州:華南大學(xué),2010.

        [2]李楊,耿昌宇,張麗芬.基于Socket通訊模式下的跨平臺(tái)數(shù)據(jù)同步[J].北京理工大學(xué)學(xué)報(bào),2002(2).

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

        国产精品一区二区三区不卡| 午夜精品久久久久久| 中文字幕无线码中文字幕| 91中文人妻丝袜乱一区三区| 国产精品国产三级国产专区50| 亚洲国产精品综合久久网络| 精品深夜av无码一区二区老年| 伊人精品无码AV一区二区三区 | 九九九免费观看视频| 日韩欧群交p片内射中文| 在线播放国产女同闺蜜 | 国产精品毛片极品久久| 欧美69久成人做爰视频| 国产色诱视频在线观看| 国产精品麻豆A在线播放| 亚洲一区亚洲二区视频在线| 国产精品vⅰdeoxxxx国产| 激情内射亚洲一区二区三区爱妻| 欧美亚洲日韩国产人成在线播放| 沐浴偷拍一区二区视频| 欧美成人aaa片一区国产精品| 日韩精品大片在线观看| 中文字幕日本人妻一区| 国内嫩模自拍诱惑免费视频 | 加勒比日本东京热1区| 偷拍偷窥在线精品视频| 人人做人人爽人人爱| 大学生被内谢粉嫩无套| 亚洲红杏AV无码专区首页| gg55gg国产成人影院| 无人视频在线观看免费播放影院| 91呻吟丰满娇喘国产区| 亚洲日本国产一区二区三区| 无遮挡1000部拍拍拍免费| 福利视频一二三在线观看| www.av在线.com| 国产白色视频在线观看| 特级毛片爽www免费版| 亚洲中文字幕久久精品蜜桃 | 麻豆五月婷婷| 小黄片免费在线播放观看|