• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于TCP協(xié)議的Android模擬器間通信在教學(xué)中的應(yīng)用研究

      2018-12-20 08:50:46許姍姍
      長春師范大學(xué)學(xué)報 2018年12期
      關(guān)鍵詞:重定向服務(wù)端模擬器

      許姍姍

      (廈門軟件職業(yè)技術(shù)學(xué)院,福建廈門 361000)

      1 研究背景

      隨著科技的迅速發(fā)展,移動網(wǎng)絡(luò)以及智能手機(jī)的普及讓人們的生活發(fā)生了巨大的變化。Android網(wǎng)絡(luò)開發(fā)就是實現(xiàn)不同終端之間的通信,其中一個應(yīng)用就是把復(fù)雜的數(shù)據(jù)操作運(yùn)算放在計算機(jī)終端,來實現(xiàn)手機(jī)的高功能運(yùn)行[1]。

      目前,基于TCP/IP協(xié)議的Socket通信是廣泛應(yīng)用的通信協(xié)議之一?;赥CP/IP協(xié)議的Socket通信,是通過指定IP地址和port號,采用c/s模式建立TCP協(xié)議下的兩個通信進(jìn)程間的連接,實現(xiàn)可靠的雙向通信[2]。生活中越來越多的廠商會將物聯(lián)網(wǎng)技術(shù)與智能硬件組合在同一個局域網(wǎng)內(nèi),由網(wǎng)關(guān)通過指令統(tǒng)一控制智能硬件。例如,火焰報警信息傳遞、監(jiān)控點(diǎn)的智能相機(jī)等平臺,就是采用高實時性的基于TCP協(xié)議的Socket通訊技術(shù),將傳感器數(shù)據(jù)實時送達(dá)。人們平常使用的網(wǎng)絡(luò)聊天程序、迅雷下載程序等都需要用到Socket通信技術(shù)。

      國內(nèi)外對于Socket的研究主要包括基于TCP/IP協(xié)議關(guān)于Socket通信程序的研究、Sokcet的網(wǎng)絡(luò)編程研究與實現(xiàn)等,現(xiàn)在已取得了較為成熟的成果[3]。但在教學(xué)中經(jīng)常遇到了以下的問題:在使用Android studio開發(fā)環(huán)境下,開發(fā)兩個APP,如果將它們各自部署到運(yùn)用Android系統(tǒng)的手機(jī)上,在同一個Wi-Fi下是可以成功通信的。但在課堂上這樣操作會比較麻煩,通常學(xué)生很少攜帶兩部手機(jī)。如果能快速地將這兩個APP發(fā)布到同一臺電腦的不同Android模擬器上進(jìn)行通信,則會既簡單又高效,這是本文研究的主要思路。

      2 基于TCP協(xié)議的Socket通信機(jī)制

      TCP/IP協(xié)議為傳輸控制協(xié)議/因特網(wǎng)互聯(lián)協(xié)議,是Internet最基本的協(xié)議,也是Internet國際互聯(lián)網(wǎng)絡(luò)的基礎(chǔ),由網(wǎng)絡(luò)層的IP協(xié)議和傳輸層的TCP協(xié)議組成[4]。Socket定義了一些規(guī)范,我們只需要遵循Socket的規(guī)定去編程即可。

      Socket是應(yīng)用層與TCP/IP協(xié)議簇通訊的中間抽象層,Socket是一組接口,通常被稱作“套接字”[5]。簡單來說,Socket提供了程序內(nèi)部與外界通信的端口,并為通信雙方提供了數(shù)據(jù)傳輸通道[6]?;赟okcet的網(wǎng)絡(luò)編程的主要操作流程如下:

      2.1 套接字服務(wù)端的具體流程

      (1)調(diào)用類ServerSocket的ServerSocket(int aport)方法創(chuàng)建一個ServerSocket對象,并綁定到指定端口。(2)調(diào)用accept()方法,監(jiān)聽連接請求,如果客戶端請求連接,則接受連接,并返回一個Socket對象。(3)通過Socket對象的getInputStream()和Socket對象的getOutputStream()方法獲得輸出流和輸入流,程序開始進(jìn)入數(shù)據(jù)的接收和發(fā)送[7]。(4)關(guān)閉流、ServerSocket對象及Socket對象。

      2.2 套接字客戶端的具體流程

      (1)調(diào)用Socket(InetAddress dstAddress,int dstPort)創(chuàng)建一個Socket對象,并連接到服務(wù)器端。(2)通過Socket對象.getInputStream()和Socket對象.getOutputStream()方法獲得輸出流和輸入流,開始進(jìn)入數(shù)據(jù)的接收和發(fā)送。(3)關(guān)閉流和Socket對象。

      套接字客戶端與服務(wù)端通信的具體流程圖如1所示。

      圖1 套接字客戶端與服務(wù)端通信的流程圖

      3 模擬器間通信需要解決的問題

      計算機(jī)之間可以通過IP地址進(jìn)行通信,IP地址都是唯一的。Android模擬器提供了一個特殊的IP地址10.0.2.2,如果同一臺計算機(jī)開啟了兩個Android模擬器,那這兩個模擬器的IP是一樣的,都是10.0.2.2。而IP相同的兩臺模擬器間如何通信是我們需要解決的問題。經(jīng)過研究,通過端口重定向技術(shù),可實現(xiàn)Android模擬器之間的通信。端口重定向技術(shù)的具體操作如下:

      (1)先在“我的電腦”右鍵屬性,進(jìn)入“高級系統(tǒng)設(shè)置”,選擇“高級”選項卡,進(jìn)入“環(huán)境變量”,選擇系統(tǒng)變量名Path,將SDK中platform-tools所在的路徑復(fù)制粘貼進(jìn)去。如圖2所示。

      圖2 在系統(tǒng)變量Path中添加SDK的platform-tools所在路徑

      (2)啟動兩個Android Studio自帶的模擬器,假設(shè)一個為emulator-5554,另一個為emulator-5556。將emulator-5554設(shè)定為服務(wù)器,將emulator-5556設(shè)定為客戶端。Android的模擬器有個特點(diǎn),就是程序訪問網(wǎng)絡(luò)的時候只可以從模擬器連接到外界,但是卻無法從外界連接模擬器。用戶想要從外界連接上模擬器,需要將端口重定向[8]。首先在cmd中執(zhí)行命令Telnet localhost 5554,遠(yuǎn)程登錄服務(wù)器,如果提示該命令無效,則要進(jìn)入控制面板,單擊“程序和功能”類別,打開“Windows功能”對話框,勾選“Telnet客戶端”組件,具體操作如圖3所示。

      圖3 打開Telnet客戶端

      接著重新執(zhí)行命令Telnet localhost 5554,命令行窗體提示“正在連接localhost...”,這樣就可以遠(yuǎn)程登錄服務(wù)器,出現(xiàn)一個標(biāo)題為“Telnet localhost”的窗體,如圖4所示。

      圖4 遠(yuǎn)程登錄服務(wù)器

      接下來輸入命令“help”,查看列表中是否有“redir”命令,如果沒有,則必須進(jìn)行身份認(rèn)證,方法很簡單,只需通過上面窗體中的“C∶UsersAdministrator。emulator_console_auth_token”這串路徑找到對應(yīng)文件,復(fù)制文件中的字符串,通過命令“auth字符串”,就能通過認(rèn)證,如圖5所示。

      圖5 通過命令“auth字符串”進(jìn)行身份證

      最后再次輸入命令“help”,就能在列表中看到“redir”命令。輸入命令“redir add tcp∶1112∶1111”,即可完成端口重定向,如圖6所示。其中,1112是客戶端new Socket(“10.0.2.2”,1112)的端口,1111是服務(wù)端new ServerSocket(“1111”)的端口。完成這步端口重定向后,外界也可以連接上模擬器,即模擬器emulator-5556可以連接上emulator-5554了。

      圖6 使用“redir”命令進(jìn)行端口重定向

      4 模擬器間通信的具體應(yīng)用

      創(chuàng)建兩個Android應(yīng)用程序:一個作為服務(wù)端程序;一個作為客戶端程序。

      (1)服務(wù)端程序關(guān)鍵代碼如下:

      serverSocket=new ServerSocket(1111);//綁定到指定端口

      Log.i("ServerActivity","服務(wù)器啟動了");

      socket=serverSocket.accept();//等待Socket請求,直到連接被打開。

      Log.i("ServerActivity","有客戶連接到服務(wù)器");

      服務(wù)端綁定到指定的端口為1111,當(dāng)用戶點(diǎn)擊按鈕、啟動服務(wù)端后,程序執(zhí)行ServerSocket對象的accept()方法,監(jiān)聽連接請求,如果客戶端請求連接,則服務(wù)端接受連接,并返回一個Socket對象。建立連接后程序通過socket.getOutputStream()和socket.getInputStream()進(jìn)行數(shù)據(jù)的傳輸。

      (2)客戶端程序關(guān)鍵代碼如下:

      socket=new Socket("10.0.2.2",1112);//以本機(jī)另一個模擬器為服務(wù)端,則IP地址是10.0.2.2。

      客戶端綁定到指定的端口為1112,連接到本地的模擬器的IP為10.0.2.2。當(dāng)用戶點(diǎn)擊按鈕,客戶端連接上服務(wù)器后,程序就可以通過socket.getOutputStream()和socket.getInputStream()進(jìn)行數(shù)據(jù)的傳輸。

      這里需要將模擬器的端口進(jìn)行重定向,使用命令“redir add tcp∶1112∶1111”,具體用法上文有詳細(xì)說明。運(yùn)行程序,將服務(wù)端程序運(yùn)行在模擬器emulator-5554上,將客戶端程序運(yùn)行在模擬器emulator-5556上。點(diǎn)擊服務(wù)端界面的“啟動服務(wù)端程序”按鈕,客戶端界面會顯示“服務(wù)端:我已經(jīng)啟動了”字樣,點(diǎn)擊客戶端界面的“連接服務(wù)端程序”按鈕,服務(wù)端界面會顯示“客戶端:我已連接上你了”字樣,這時表明服務(wù)端和客戶端已連接成功,可以進(jìn)行通信了。運(yùn)行效果如圖7和圖8所示。

      圖7 服務(wù)端界面

      圖8 客戶端界面

      5 結(jié)語

      本文運(yùn)用端口重定向技術(shù)實現(xiàn)了同一臺計算機(jī)上兩個Android模擬器間的通信,通過端口重定向技術(shù)使外界也能連接上模擬器。在教學(xué)中可以直接將應(yīng)用程序部署到模擬器上進(jìn)行網(wǎng)絡(luò)通信,解決了課堂上沒有太多真機(jī)可用于測試的問題,同時還可以應(yīng)用于初創(chuàng)企業(yè)。目前運(yùn)用Android系統(tǒng)的手機(jī)機(jī)型眾多,系統(tǒng)版本多,保證應(yīng)用程序的兼容性是在應(yīng)用上架前必做的測試之一。而兼容性測試對于網(wǎng)絡(luò)開發(fā)的初創(chuàng)企業(yè)而言是一大難題,可使用本文提出的模擬器間通信的方法先進(jìn)行通信測試,再到一些網(wǎng)站上進(jìn)行兼容性測試(例如,WeTest平臺就提供了移動端測試服務(wù))。

      猜你喜歡
      重定向服務(wù)端模擬器
      了不起的安檢模擬器
      盲盒模擬器
      劃船模擬器
      解決安卓文件夾亂象
      云存儲中基于相似性的客戶-服務(wù)端雙端數(shù)據(jù)去重方法
      重復(fù)壓裂裂縫重定向的措施研究
      新時期《移動Web服務(wù)端開發(fā)》課程教學(xué)改革的研究
      在Windows Server 2008上創(chuàng)建應(yīng)用
      4G偽基站的監(jiān)測定位與規(guī)避協(xié)同分析
      移動通信(2017年13期)2017-09-29 16:30:11
      動態(tài)飛行模擬器及其發(fā)展概述
      勃利县| 新和县| 乌恰县| 县级市| 罗山县| 彰武县| 包头市| 金阳县| 尚志市| 华坪县| 浦江县| 离岛区| 徐水县| 左云县| 荃湾区| 乌兰县| 金溪县| 洱源县| 丹江口市| 镇江市| 礼泉县| 出国| 扬中市| 方城县| 武定县| 文化| 滦南县| 卢湾区| 南靖县| 新乡市| 博兴县| 泰安市| 胶州市| 团风县| 齐河县| 泰和县| 松阳县| 全南县| 佳木斯市| 二连浩特市| 青冈县|