




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第八章網(wǎng)絡(luò)與數(shù)據(jù)通信技術(shù)俞成海教學(xué)任務(wù)與目標教學(xué)任務(wù)USB編程Wi-Fi編程藍牙編程Socket實現(xiàn)技術(shù)HTTP協(xié)議通信實現(xiàn)技術(shù)教學(xué)重點藍牙編程Socket實現(xiàn)技術(shù)USB編程兩種模式來支持AndroidUSB外設(shè):USB
外設(shè)模式和USB主機模式在
USB
外設(shè)模式下,外部
USB
硬件(裝有Android的設(shè)備要連接的外部設(shè)備)充當(dāng)
USB
主機。外設(shè)的例子包括機器人、擴展插座、診斷和音樂設(shè)備、電子報亭、讀卡器等其他設(shè)備,這種模式給予不具備主機功能的
Android
設(shè)備以與USB硬件交互的能力。在USB主機模式下,裝有
Android
的設(shè)備扮演著主機的角色。這種設(shè)備的例子包括數(shù)碼像機,鍵盤,鼠標和游戲手柄。那些適應(yīng)面很廣的USB設(shè)備仍可以與Android應(yīng)用交互,前提是這些Android應(yīng)用可以正確的與這些設(shè)備通訊。/guide/topics/usb/index.html
USB主機模式常用的類:UsbManager:允許您枚舉已連接的USB設(shè)備并且與其進行“交流”。UsbDevice:代表了一個已連接的USB的設(shè)備并且包含具有該設(shè)備驗證信息,接口和接口點的方法。UsbInterface:代表了一個USB設(shè)備的一個接口,該接口定義了一系列關(guān)于設(shè)備的函數(shù)。一個設(shè)備在進行“交流”的時候可以有一個或者多個接口UsbEndpoint:代表一個接口的接口點,該接口點就是這個接口的通信信道。一個接口可以有一個或者多個這樣的接口點,而且一般都是有輸入和輸出雙向通信的接口點。UsbDeviceConnection:代表該設(shè)備的一個連接,用來在接?點上傳輸數(shù)據(jù)。這個類允許您能用同步或者異步的方式發(fā)送和返回數(shù)據(jù)。UsbRequest:在通過UsbDeviceConnection和設(shè)備進行“交流”的一個異步請求。UsbConstants:關(guān)于在linux內(nèi)核中l(wèi)inux/usb/ch9.h的相關(guān)定義的USB常量使用步驟(見附件)為了讓應(yīng)用可以發(fā)現(xiàn)一個USB設(shè)備,需要android.hardware.usb.action.USB_DEVICE_ATTACHED這個意圖指定一個意圖來進行過濾獲取USB信息UsbManagermanager=(UsbManager)getSystemService(Context.USB_SERVICE);HashMap<String,UsbDevice>deviceList=manager.getDeviceList();UsbDevicedevice=deviceList.get("deviceName");
和設(shè)備通信
UsbInterface
intf=
device.getInterface(0);
UsbEndpoint
endpoint=
intf.getEndpoint(0);
UsbDeviceConnection
connection=
manager.openDevice(device);
connection.claimInterface(intf,
true);
connection.bulkTransfer(endpoint,
bytes,
bytes.length,
0);
終止通信
當(dāng)你完成數(shù)據(jù)的傳輸或者你的設(shè)備已拔出時,通過調(diào)用releaseInterface()和close()來關(guān)閉接口和連接。Wi-Fi編程
ConnectivityManagerNetworkInfomWiFiNetworkInfo=mConnectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI)所需要用到的wifi相關(guān)Android包:.wifi常見操作主要包括以下及各類和接口:1、WifiManager提供了管理WiFi連接的大部分API,主要包括如下內(nèi)容: 查看已經(jīng)配置好的網(wǎng)絡(luò)清單,而且可以修改個別記錄的屬性。 可以建立或是關(guān)閉WiFi網(wǎng)絡(luò)連接,并且可以查詢有關(guān)網(wǎng)絡(luò)狀態(tài)的動態(tài)信息。 對接入點的掃描結(jié)果包含足夠的信息來決定需要與什么接入點建立連接。 同時還定義了許多常量來表示W(wǎng)iFi狀態(tài)的改變。常用的方法:getWiFiState,isWifiEnabled,setWifiEnabled,startScan,getScanResults等等基于Android的WiFi相關(guān)庫函數(shù)WiFi相關(guān)庫函數(shù)所需要用到的wifi相關(guān)Android包:.wifi常見操作主要包括以下及各類和接口:2、WifiConfigurationWiFi網(wǎng)絡(luò)的配置,包括安全配置等。3.WifiInfoWiFi無線連接的描述,包括接入點、網(wǎng)絡(luò)連接狀態(tài)、隱藏的接入點,ip地址、連接速度、mac地址、網(wǎng)絡(luò)id,信號強度等信息。4.ScanResult主要用來描述已經(jīng)檢測出的接入點,包括接入點的地址、接入點的名稱、身份認證、頻率、信號強度等信息。找到周圍AP的關(guān)鍵步驟檢測網(wǎng)卡狀態(tài),修改網(wǎng)卡狀態(tài)——開啟,進行掃描周圍ap,打印結(jié)果classListWifiListernerimplementsOnClickListener{@OverridepublicvoidonClick(Viewv){wifiManager=(WifiManager)WifiActivity.this.getSystemService(Context.WIFI_SERVICE);wifiManager.startScan();mWifiList=wifiManager.getScanResults();for(inti=0;i<mWifiList.size();i++){sb.append(newInteger(i).toString()+".");sb.append(mWifiList.get(i).toString());sb.append("\n");}mainText.setText(sb);sb.delete(0,sb.capacity());}}藍牙編程,使用藍牙進行設(shè)備通信,主要包含四個部分:藍牙設(shè)置、搜索設(shè)備、連接、傳輸數(shù)據(jù)BluetoothAdapter代表本地藍牙適配器(藍牙發(fā)射器),是所有藍牙交互的入?。通過它可以搜索其它藍牙設(shè)備,查詢已經(jīng)配對的設(shè)備列表,通過已知的MAC地址創(chuàng)建BluetoothDevice,創(chuàng)建BluetoothServerSocket監(jiān)聽來自其它設(shè)備的通信。BluetoothDevice代表了一個遠端的藍牙設(shè)備,使用它請求遠端藍牙設(shè)備連接或者獲取遠端藍牙設(shè)備的名稱、地址、種類和綁定狀態(tài)。BluetoothSocket代表了一個藍牙套接字的接?,是應(yīng)用程序通過輸?、輸出流與其他藍牙設(shè)備通信的連接點。BluetoothServerSocket代表打開服務(wù)連接來監(jiān)聽可能到來的連接請求(屬于server端),為了連接兩個藍牙設(shè)備必須有一個設(shè)備作為服務(wù)器打開一個服務(wù)套接字。BluetoothClass描述了一個設(shè)備的特性(profile)或該設(shè)備上的藍牙一致可以提供哪些服務(wù)(service),但不可信。比如,設(shè)備是一個電話、計算機或手持設(shè)備;設(shè)備可以提供audio/telephony服務(wù)等。可以用它來進行一些UI上的提示。BluetoothHeadset提供手機使用藍牙耳機的支持。這既包括藍牙耳機和免提(V1.5)模式。BluetoothA2dp定義高品質(zhì)的音頻,可以從一個設(shè)備傳輸?shù)搅硪粋€藍牙連接?!癆2DP的”代表高級音頻分配模式。BluetoothHealth代表了醫(yī)療設(shè)備配置代理控制的藍牙服務(wù)BluetoothHealthCallback一個抽象類,使用實現(xiàn)BluetoothHealth回調(diào)。你必須擴展這個類并實現(xiàn)回調(diào)方法接收更新應(yīng)用程序的注冊狀態(tài)和藍牙通道狀態(tài)的變化。BluetoothHealthAppConfiguration代表一個應(yīng)用程序的配置,藍牙醫(yī)療第三方應(yīng)用注冊與遠程藍牙醫(yī)療設(shè)備交流。BluetoothProfile.ServiceListener當(dāng)他們已經(jīng)連接到或從服務(wù)斷開時通知BluetoothProfileIPX的客戶時一個接?(即運行一個特定的配置文件,內(nèi)部服務(wù))。BlueTooth使用至少要在AndroidManifest.xml中聲明兩個權(quán)限:BLUETOOTH和BLUETOOTH_ADMIN獲取BluetoothAdapter打開藍牙:通過isEnabled()來檢查藍牙當(dāng)前是否可用。如果這個方法返回false,則藍牙不能夠使用。為了請求藍牙使用,呼叫startActivityForResult()與的ACTION_REQUEST_ENABLE動作意圖獲取BluetoothAdapter查找匹配設(shè)備掃描設(shè)備開始搜索設(shè)備,調(diào)用startDiscovery()。該函數(shù)是異步的,調(diào)用后立即返回,返回值表示搜索是否成功開始。應(yīng)用中可以注冊一個帶ACTION_FOUNDIntent的BroadcastReceiver,搜索到每一個設(shè)備時都接收到消息。Intent攜帶著而外的字段信息EXTRA_DEVICE和EXTRA_CLASS,分別包含一個BluetoothDevice和一個BluetoothClass。使用cancelDiscovery()來停止搜索使能被發(fā)現(xiàn)如果想讓本地設(shè)備被其他設(shè)備發(fā)現(xiàn),可以帶ACTION_REQUEST_DISCOVERABLEactionIntent調(diào)用startActivityForResult(Intent,int)方法作為服務(wù)器連接通過持有?個打開的BluetoothServerSocket對象。服務(wù)器socket的作用是偵聽進來的連接,如果一個連接被接受,提供一個連接好的BluetoothSocket對象。建立服務(wù)器socket和接收一個連接的基本步驟1.通過調(diào)用listenUsingRfcommWithServiceRecord(String,UUID)得到一個BluetoothServerSocket對象,當(dāng)客戶端試圖連接本設(shè)備,它將攜帶一個UUID用來唯一標識它要連接的服務(wù),UUID必須匹配,連接才會被接受。2.通過調(diào)用accept()來偵聽連接請求。這是一個阻塞的調(diào)用,直到有連接進來或者產(chǎn)生異常才會返回。只有遠程設(shè)備發(fā)送一個連接請求,并且攜帶的UUID與偵聽它socket注冊的UUID匹配,連接請求才會被接受。如果成功,accept()將返回一個連接好的BluetoothSocket對象。3.除非需要再接收另外的連接,否則的話調(diào)用close()。close()釋放serversocket和它的資源,但不會關(guān)閉連接accept()返回的連接好的BluetoothSocket對象。作為客戶端連接1.用BluetoothDevice調(diào)用createRfcommSocketToServiceRecord(UUID)獲取一個BluetoothSocket對象。這個初始化的BluetoothSocket會連接到BluetoothDevice。2.調(diào)用connect()完成連接當(dāng)調(diào)用這個方法的時候,系統(tǒng)會在遠程設(shè)備上完成一個SDP查找來匹配UUID。如果查找成功并且遠程設(shè)備接受連接,就共享RFCOMM信道,connect()會返回。這也是一個阻塞的調(diào)用,不管連接失敗還是超時(12秒)都會拋出異常。管理連接如果已經(jīng)連接了兩個設(shè)備,他們都已經(jīng)擁有各自的連接好的BluetoothSocket對象??梢栽谠O(shè)備間共享數(shù)據(jù)了。使用BluetoothSocket,傳輸任何數(shù)據(jù)通常來說都很容易了:1.通過socket獲取輸入輸出流來處理傳輸(分別使用getInputStream()和getOutputStream())。2.用read(byte[])和write(byte[])來實現(xiàn)讀寫。基于Socket網(wǎng)絡(luò)編程Socket網(wǎng)絡(luò)通信的組成元素服務(wù)器,主要功能:偵聽連接、接收連接、接收數(shù)據(jù)和向客戶端發(fā)送數(shù)據(jù)??蛻舳耍饕δ埽喊l(fā)起連接、接收數(shù)據(jù)和向服務(wù)器發(fā)送數(shù)據(jù)Socket網(wǎng)絡(luò)通信的基本原理IP地址:主機標識端口:服務(wù)類型Socket=IP(address)
+Port(server)Java--Internet語言具備強大網(wǎng)絡(luò)通信功能基于套接字(Socket)通信方式流套接字TCP協(xié)議(TransmissionControlProtocol)UDP協(xié)議(UserDatagramProtocol)數(shù)據(jù)報套接字基于Socket網(wǎng)絡(luò)通信方式主要使用類
Java的Socket屬于流式套接字通信,采用TCP協(xié)議,提供面向連接的服務(wù),實現(xiàn)可靠的通信。
J提供兩個類,實現(xiàn)Socke通信:ServerSocket--服務(wù)器端
Socket--客戶端通
操作TCP套接字的發(fā)送和接收需要借助java.io包的
InputStream/OutputStream
完成,分別通過方法實現(xiàn):Socket.getInputStream()/Socket.getOutputStream()Socket/ServerSocket構(gòu)造函數(shù)Socket()
通過系統(tǒng)默認類型的SocketImpl創(chuàng)建未連接套接字
Socket(InetAddressaddress,intport)
創(chuàng)建一個流套接字并將其連接到指定IP地址的指定端口號
Socket(InetAddressaddress,intport,InetAddresslocalAddr,intlocalPort)
創(chuàng)建一個套接字并將其連接到指定遠程端口上的指定遠程地址
Socket(Stringhost,intport)
創(chuàng)建一個流套接字并將其連接到指定主機上的指定端口號
Socket(Stringhost,intport,InetAddresslocalAddr,intlocalPort)
創(chuàng)建一個套接字并將其連接到指定遠程主機上的指定遠程端口ServerSocket()
創(chuàng)建非綁定服務(wù)器套接字
ServerSocket(intport)
創(chuàng)建綁定到特定端口的服務(wù)器套接字
ServerSocket(intport,intbacklog)
利用指定的backlog創(chuàng)建服務(wù)器套接字并將其綁定到指定的本地端口號
ServerSocket(intport,intbacklog,InetAddressbindAddr)
使用指定的端口、偵聽backlog和要綁定到的本地IP地址創(chuàng)建服務(wù)器
Socket/ServerSocket主要方法Socke通信機制OutputStream獲得Socket對象輸出流建立Socket連接通過流傳輸數(shù)據(jù)服務(wù)端聯(lián)結(jié)成功獲得已連接的Socket對象Socket(host,port)
創(chuàng)建Socket對象向指定主機端口發(fā)出連接請求客戶端Socket對象ServerSocket對象InputStream獲得Socket對象輸入流申請連接ServiceSocket.close()停止提供TCP連接服務(wù)一個ServerSocket對象和一個Socket對象一個Socket對象Socket.close()關(guān)閉TCP連接ServerSocket(port)創(chuàng)建ServiceSocke對象,提供TCP連接服務(wù)accept()在指定的端口監(jiān)聽客戶端請求聯(lián)結(jié)創(chuàng)建InputStream獲得Socket對象輸入流Socket.close()關(guān)閉TCP連接OutputStream獲得Socket對象輸出流ServerSocket對象訪問監(jiān)聽Socke通信機制Server端Client端service=ServerSocket(port_number)創(chuàng)建service對象,以TCP服務(wù)實現(xiàn)端口監(jiān)聽socket=ServerSocket.accept()創(chuàng)建socke對象,接收用戶訪問請求Socket=Socket(port_number)創(chuàng)建socke對象,建立連接,發(fā)送訪問請求InputStreamSocket對象輸入流OutputStreamSocket對象輸出流通過socke對象實現(xiàn)與Client端數(shù)據(jù)傳輸OutputStreamSocket對象輸出流InputStreamSocket對象輸入流通過socke對象,實現(xiàn)與Servert端數(shù)據(jù)傳輸socket.close()關(guān)閉Socke關(guān)閉結(jié)束與Client端的連接service.close()關(guān)閉監(jiān)聽程序socket.close()關(guān)閉Socke結(jié)束與Server端的連接(1)建立連接(2)數(shù)據(jù)通訊(3)拆除連接客戶端開啟INTERNET布局界面(Main.xml)獲取資源(EditText,Button,TextView)Socket通信數(shù)據(jù)讀寫(DataInputStream/DataOutputStream)客戶端主要代碼:publicvoidonClick(Viewv){Sockets=null; DataOutputStreamdout=null; DataInputStreamdin=null;if(v==button1){//點擊的是按鈕 try{ s=newSocket("02",8888);//連接服務(wù)器
dout=newDataOutputStream(s.getOutputStream());//得到輸出流
din=newDataInputStream(s.getInputStream());//得到輸入流dout.writeUTF(editText.getText().toString());//向服務(wù)器發(fā)送消息textView.setText("服務(wù)器發(fā)來的消息:"+din.readUTF());//接收服務(wù)器發(fā)來的消息
}catch(Exceptione){ e.printStackTrace();//打印異常信息 }finally try{ if(dout!=null){ dout.close();//關(guān)閉輸入流 } if(din!=null){ din.close();//關(guān)閉輸入流 } if(s!=null) s.close();//關(guān)閉Socket連接 } } catch(Exceptione){ e.printStackTrace();//打印異常信息 }}}}服務(wù)器(例子)ServerSocketAcceptDataInputStream/DataOutputStreamRead/Write服務(wù)器端主要代碼:ServerSocketss=null;//ServerSocket的引用Sockets=null;//Socket的引用DataInputStreamdin=null;DataOutputStreamdout=null;try{ ss=newServerSocket(8888);//監(jiān)聽到8888端口
System.out.println("已監(jiān)聽到8888端口!");}catch(Exceptione){ e.printStackTrace();//打印異常信息}while(true){ try{ s=ss.accept();//等待客戶端連接
din=newDataInputStream(s.getInputStream()); dout=newDataOutputStream(s.getOutputStream());//得到輸入輸出流
Stringmsg=din.readUTF();//讀一個字符串
System.out.println("ip:"+s.getInetAddress());//打印客戶端IP System.out.println("msg:"+msg);//打印客戶端發(fā)來的消息
System.out.println("===================="); dout.writeUTF("HelloClient!");//向客戶端發(fā)送消息
} catch(Exceptione){ e.printStackTrace();//打印異常信息
}
基于HTTP協(xié)議的網(wǎng)絡(luò)編程統(tǒng)一資源定位器URL:URL(UniformResourceLocator)是一致資源定位器的簡稱,它表示Internet上某一資源的地址。通過URL我們可以訪問Internet上的各種網(wǎng)絡(luò)資源,比如最常見的WWW,F(xiàn)TP站點。瀏覽器通過解析給定的URL可以在網(wǎng)絡(luò)上查找相應(yīng)的文件或其他資源。URL的組成protocol://resourceName協(xié)議名(protocol)指明獲取資源所使用的傳輸協(xié)議,如http、ftp、gropher、file等,資源名(resourceName)則應(yīng)該是資源的完整地址,包括主機名、端口號、文件名或文件內(nèi)部的一個引用。例如:/協(xié)議名://主機名/home/welcome.html協(xié)議名://機器名+文件名:80/Gamelan/network.html#BOTTOM協(xié)議名://機器名+端口號+文件名+內(nèi)部引用.創(chuàng)建一個URL為了表示URL,中實現(xiàn)了類URL。我們可以通過下面的構(gòu)造方法來初始化一個URL對象:(1)publicURL(Stringspec);(2)publicURL(URLcontext,Stringspec);(3)publicURL(Stringprotocol,Stringhost,Stringfile);(4)publicURL(Stringprotocol,Stringhost,intport,Stringfile);解析一個URL一個URL對象生成后,其屬性是不能被改變的,但是我們可以通過類URL所提供的方法來獲取這些屬性從URL讀取WWW網(wǎng)絡(luò)資源當(dāng)我們得到一個URL對象后,就可以通過它讀取指定的WWW資源。通過HttpURLConnetction連接WWW通過URL的方法openStream(),我們只能從網(wǎng)絡(luò)上讀取數(shù)據(jù),如果我們同時還想輸出數(shù)據(jù),例如向服務(wù)器端的CGI程序發(fā)送一些數(shù)據(jù),我們必須先與URL建立連接,然后才能對其進行讀寫,這時就要用到類URLConnection了。CGI是公共網(wǎng)關(guān)接口(CommonGatewayInterface)的簡稱,它是用戶瀏覽器和服務(wù)器端的應(yīng)用程序進行連接的接口,有關(guān)CGI程序設(shè)計,請讀者參考有關(guān)書籍。類HttpURLConnetction也在包中定義,它表示Java程序和URL在網(wǎng)絡(luò)上的通信連接。當(dāng)與一個URL建立連接時,首先要在一個URL對象上通過方法openConnection()生成對應(yīng)的HttpURLConnetction對象。如果連接過程失敗,將產(chǎn)生IOException.HttpURLConnectionucon=null;BufferedReaderreader=null;StringBuilderbab=null;try{URLmyURL=newURL
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 初中數(shù)學(xué)教研工作計劃
- 深圳小產(chǎn)權(quán)房轉(zhuǎn)讓協(xié)議書范本
- 廣告承攬制作安裝合同
- 房屋轉(zhuǎn)贈協(xié)議書范本
- 預(yù)約買賣合同范本
- 課題申報書:高校生態(tài)文明教育的主要形式及典型案例
- 圖書委托出合同范文
- 百貨購銷合同范本
- 健身房年度會員活動計劃
- 人教版2024-2025學(xué)年八年級數(shù)學(xué)學(xué)期總結(jié)計劃
- 《 大學(xué)生軍事理論教程》全套教學(xué)課件
- 中考數(shù)學(xué)計算題練習(xí)100道(2024年中考真題)
- 外研版(2019) 必修第二冊 Unit 5 On the road Coast to Coast P57PPT( 共8張)
- 羅馬帝國衰亡史pdf羅馬帝國衰亡史史
- 北師大版生物七年級下冊12.2感受器與感覺器官(第1課時)導(dǎo)學(xué)案(無答案)
- 最新露天礦山安全培訓(xùn)課件(經(jīng)典)
- 環(huán)境學(xué)概論 考驗知識點歸納劉陪同
- 室內(nèi)設(shè)計施工圖詳細說明及制圖規(guī)范說明ppt(智囊書屋)
- 貴州水城礦業(yè)集團馬場煤礦“3.12”煤與瓦斯突出事故分析(定)
- 劇本殺_劇本推薦——四人本《暗船》
- 質(zhì)量保證體系結(jié)構(gòu)圖(共3頁)
評論
0/150
提交評論