第八章 網絡與數據通信技術_第1頁
第八章 網絡與數據通信技術_第2頁
第八章 網絡與數據通信技術_第3頁
第八章 網絡與數據通信技術_第4頁
第八章 網絡與數據通信技術_第5頁
已閱讀5頁,還剩54頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第八章 網絡與數據通信技術俞成海俞成海教學任教學任務USB 編程Wi-Fi 編程藍牙編程Socket實現技術HTTP 協議通信實現技術教學重點藍牙編程Socket實現技術US兩種模式來支持Android USB外設 :USB 外設模式和USB主機模式 在 USB 外設模式下,外部 USB 硬件(裝有Android的設備要連接的外部設備)充當 USB 主機。外設的例子包括機器人、擴展插座、診斷和音樂設備、電子報亭、讀卡器等其他設備,這種模式給予不具備主機功能的 Android 設備以與USB硬件交互的能 力。在USB主機模式下,裝有 Android 的設備扮演著主機的角色。這種設備的例子包括數碼

2、像機,鍵盤,鼠標和游戲手柄。那些適應面很廣的USB設備仍可以與Android應用交互,前提是這些Android應用可以正確的與這些設備通訊。 http:/ manager = (UsbManager) getSystemService(Context.USB_SERVICE); HashMap deviceList = manager.getDeviceList(); UsbDevice device =deviceList.get(deviceName); 和設備通信和設備通信 UsbInterface intf= device.getInterface(0); UsbEndpoint en

3、dpoint= intf.getEndpoint(0); UsbDeviceConnection connection= manager.openDevice(device); connection.claimInterface(intf, true); connection.bulkTransfer(endpoint, bytes, bytes.length, 0); 終止通信終止通信 當你完成數據的傳輸或者你的設備已拔出時,通過調用releaseInterface()和close()來關閉接口和連接。Wi-Fi 編程ConnecerNetworkInfo mWiFiNetworkInfo

4、= mConnectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI)所需要用到的wifi相關Android包:.wifi常見操作主要包括以下及各類和接口:1、WifiManager 提供了管理WiFi連接的大部分API,主要包括如下內容:查看已經配置好的網絡清單,而且可以修改個別記錄的屬性。可以建立或是關閉WiFi網絡連接,并且可以查詢有關網絡狀態的動態信息。對接入點的掃描結果包含足夠的信息來決定需要與什么接入點建立連接。同時還定義了許多常量來表示WiFi狀態的改變。常用的方法:getWiFiState , isWifiEna

5、bled,setWifiEnabled,startScan,getScanResults等等WiFi所需要用到的所需要用到的wifi相關相關Android包:包:.wifi常見操作主要包括以下及各類和接口:常見操作主要包括以下及各類和接口:2、WifiConfigurationWiFi網絡的配置,包括安全配置等。網絡的配置,包括安全配置等。3.WifiInfoWiFi無線連接的描述,包括接入點、網絡連接狀態、隱藏的接無線連接的描述,包括接入點、網絡連接狀態、隱藏的接入點,入點,ip地址、連接速度、地址、連接速度、mac地址、網絡地址、網絡id,信號強度等信信號強度等信息。息。4.ScanRes

6、ult主要用來描述已經檢測出的接入點,包括接入點的地址、接入主要用來描述已經檢測出的接入點,包括接入點的地址、接入點的名稱、身份認證、頻率、信號強度等信息。點的名稱、身份認證、頻率、信號強度等信息。找到周圍A檢測網卡狀態,修改網卡狀態檢測網卡狀態,修改網卡狀態開啟,進行掃描周圍開啟,進行掃描周圍ap,打印結果打印結果class ListWifiListerner implements OnClickListenerOverride public void onClick(View v) wifiManager = (WifiManager)WifiActivity.this.getSystem

7、Service(Context.WIFI_SERVICE);wifiManager.startScan(); mWifiList = wifiManager.getScanResults(); for(int i=0;imWifiList.size();i+) sb.append(new Integer(i).toString()+.); sb.append(mWifiList.get(i).toString(); sb.append(n); mainText.setText(sb); sb.delete(0, sb.capacity(); 藍牙,使用藍牙進行設備通信,主要包含四個部分:藍牙設

8、置、搜索設備、連接、傳輸數據BluetoothAdapter 代表本地藍牙適配器(藍牙發射器),是所有藍牙交互的入。通過它可以搜索其它藍牙設備,查詢已經配對的設備列表,通過已知的MAC地址創建BluetoothDevice,創建BluetoothServerSocket監聽來自其它設備的通信。BluetoothDevice 代表了一個遠端的藍牙設備, 使用它請求遠端藍牙設備連接或者獲取 遠端藍牙設備的名稱、地址、種類和綁定狀態。 BluetoothSocket 代表了一個藍牙套接字的接,是應用程 序通過輸、輸出流與其他藍牙設備通信的連接點。BluetoothServerSocket 代表打開服

9、務連接來監聽可能到來的連接請求 (屬于 server 端) , 為了連接兩個藍牙設備必須有一個設備作為服務器打開一個服務套接字。 BluetoothClass 描述了一個設備的特性(profile)或該設備上的藍牙一致可以提供哪些服務(service),但不可信。比如,設備是一個電話、計算機或手持設備;設備可以提供audio/telephony服務等。可以用它來進行一些UI上的提示。BluetoothHeadset 提供手機使用藍牙耳機的支持。這既包括藍牙耳機和免提(V1.5)模式。BluetoothA2dp 定義高品質的音頻,可以從一個設備傳輸到另一個藍牙連接。 “A2DP的”代表高級音頻分

10、配模式。BluetoothHealth 代表了醫療設備配置代理控制的藍牙服務BluetoothHealthCallback一個抽象類,使用實現BluetoothHealth回調。你必須擴展這個類并實現回調方法接收更新應用程序的注冊狀態和藍牙通道狀態的變化。BluetoothHealthAppConfiguration 代表一個應用程序的配置,藍牙醫療第三方應用注冊與遠程藍牙醫療設備交流。BluetoothProfile.ServiceListener 當他們已經連接到或從服務斷開時通知BluetoothProfile IPX的客戶時一個接(即運行一個特定的配置文件,內部服務)。BlueT至少要

11、在AndroidManifest.xml中聲明兩個權限:BLUETOOTH和 BLUETOOTH_ADMIN獲取BluetoothAdapter打開藍牙:通過isEnabled()來檢查藍牙當前是否可用。如果這個方法返回false,則藍牙不能夠使用。為了請求藍牙使用,呼叫startActivityForResult()與的ACTION_REQUEST_ENABLE動作意圖獲取BluetoothAdapter查找匹配設備掃描設備開始搜索設備,調用開始搜索設備,調用startDiscovery() 。該函數是異步的,調用后立即返回,。該函數是異步的,調用后立即返回,返回值表示搜索是否成功開始。返回

12、值表示搜索是否成功開始。應用中可以注冊一個帶應用中可以注冊一個帶ACTION_FOUND Intent的的BroadcastReceiver,搜,搜索到每一個設備時都接收到消息。索到每一個設備時都接收到消息。Intent攜帶著而外的字段信息攜帶著而外的字段信息EXTRA_DEVICE和和EXTRA_CLASS,分別包含一個,分別包含一個BluetoothDevice和一和一個個BluetoothClass。使用使用cancelDiscovery()來停止搜索來停止搜索使能被發現如果想讓本地設備被其他設備發現,可以帶ACTION_REQUEST_DISCOVERABLE action Inten

13、t調用startActivityForResult(Intent, int) 方法作為服務器連接通過持有通過持有個打開的個打開的BluetoothServerSocket對對象。服務器象。服務器socket的作用是偵聽進來的連接,如的作用是偵聽進來的連接,如果一個連接被接受,提供一個連接好的果一個連接被接受,提供一個連接好的BluetoothSocket對象。對象。建立服務器socket1.通過調用listenUsingRfcommWithServiceRecord(String, UUID)得到一個BluetoothServerSocket對象,當客戶端試圖連接本設備,它將攜帶一個UUID用

14、來唯一標識它要連接的服務,UUID必須匹配,連接才會被接受。2.通過調用accept()來偵聽連接請求。這是一個阻塞的調用,直到有連接進來或者產生異常才會返回。只有遠程設備發送一個連接請求,并且攜帶的UUID與偵聽它socket注冊的UUID匹配,連接請求才會被接受。如果成功,accept()將返回一個連接好的BluetoothSocket對象。3.除非需要再接收另外的連接,否則的話調用close() 。close()釋放server socket和它的資源,但不會關閉連接accept()返回的連接好的BluetoothSocket對象。作為客1.用BluetoothDevice調用creat

15、eRfcommSocketToServiceRecord(UUID)獲取一個BluetoothSocket對象。 這個初始化的BluetoothSocket會連接到BluetoothDevice。2.調用connect()完成連接 當調用這個方法的時候,系統會在遠程設備上完成一個SDP查找來匹配UUID。如果查找成功并且遠程設備接受連接,就共享RFCOMM信道,connect()會返回。這也是一個阻塞的調用,不管連接失敗還是超時(12秒)都會拋出異常。管理連接如果已經連接了兩個設備,他們都已經擁有各自的連接好的BluetoothSocket對象。可以在設備間共享數據了。使用BluetoothS

16、ocket,傳輸任何數據通常來說都很容易了:1.通過socket獲取輸入輸出流來處理傳輸(分別使用getInputStream()和getOutputStream() )。2.用read(byte)和write(byte)來實現讀寫。基于SockSocket網絡通信的組成元素服務器,主要功能:偵聽連接、接收連接、接收數據和向客戶端發送數據。客戶端,主要功能:發起連接、接收數據和向服務器發送數據Socket網絡通信的基本原理IP地址 : 主機標識端 口 : 服務類型Socket = IP(address) + Port(server)Java-Internet語言語言具備強大網絡通信功能具備強大

17、網絡通信功能基于套接字(Socket)通信方式流套接字TCP協議協議(Transmission Control Protocol)UDP協議協議 (User Datagram Protocol)數據報套接字主要 Java的的Socket屬于流式套接字通信,采用屬于流式套接字通信,采用TCP協議,提協議,提供面向連接的服務,實現可靠的通信。供面向連接的服務,實現可靠的通信。 J提供兩個類,實現Socke通信:ServerSocket - 服務器端 Socket - 客戶端通 操作TCP 套接字的發送和接收需要借助java.io包的 InputStream / OutputStream 完成,分別

18、通過方法實現:Socket.getInputStream() / Socket.getOutputStream()Socket/Serv Socket() 通過系統默認類型的通過系統默認類型的 SocketImpl 創建未連接套接字創建未連接套接字 Socket(InetAddress address, int port) 創建一個流套接字并將其連接到指定創建一個流套接字并將其連接到指定 IP 地址的指定端口號地址的指定端口號 Socket(InetAddress address, int port, InetAddress localAddr, int localPort) 創建一個套接字并

19、將其連接到指定遠程端口上的指定遠程地址創建一個套接字并將其連接到指定遠程端口上的指定遠程地址 Socket(String host, int port) 創建一個流套接字并將其連接到指定主機上的指定端口號創建一個流套接字并將其連接到指定主機上的指定端口號 Socket(String host, int port, InetAddress localAddr, int localPort) 創建一個套接字并將其連接到指定遠程主機上的指定遠程端口創建一個套接字并將其連接到指定遠程主機上的指定遠程端口ServerSocket() 創建非綁定服務器套接字 ServerSocket(int port)

20、創建綁定到特定端口的服務器套接字 ServerSocket(int port, int backlog) 利用指定的 backlog 創建服務器套接字并將其綁定到指定的本地端口號 ServerSocket(int port, int backlog, InetAddress bindAddr) 使用指定的端口、偵聽 backlog 和要綁定到的本地 IP 地址創建服務器 Socket/ServSockOutputStream獲得獲得Socket對象輸出流對象輸出流建立Socket連接通過流傳輸數據服務端聯結成功聯結成功獲得已連接的獲得已連接的Socket對象對象Socket (host,por

21、t)Socket (host,port) 創建創建Socket對象對象向指定主機端口發出連接請求向指定主機端口發出連接請求客戶端Socket對象ServerSocket對象InputStream獲得獲得Socket對象輸入流對象輸入流申請連接ServiceSocket.close()停止提供停止提供TCP連接服務連接服務一個一個ServerSocket對象和一個對象和一個Socket對象對象一個一個Socket對象對象Socket.close()關閉關閉TCP連接連接ServerSocket (port)創建創建ServiceSocke對象對象,提供提供TCP連接服務連接服務accept ()

22、在指定的端口監聽客戶端請求聯結創建在指定的端口監聽客戶端請求聯結創建InputStream獲得獲得Socket對象輸入流對象輸入流Socket.close()關閉關閉TCP連接連接OutputStream獲得獲得Socket對象輸出流對象輸出流ServerSocket對象訪問監聽SockServer端Client端service = ServerSocket (port_number)創建service對象,以TCP服務實現端口監聽socket = ServerSocket.accept()創建socke對象, 接收用戶訪問請求Socket = Socket (port_number)創建so

23、cke對象,建立連接,發送訪問請求InputStream Socket對象輸入流OutputStream Socket對象輸出流通過socke對象實現與Client端數據傳輸OutputStream Socket對象輸出流InputStream Socket對象輸入流通過socke對象,實現與Servert端數據傳輸socket.close() 關閉Socke關閉結束與Client端的連接service. close()關閉監聽程序socket.close() 關閉Socke結束與Server端的連接(1)建立連接(2)數據通訊(3)拆除連接客開啟INTERNET布局界面(Main.xml)獲

24、取資源(EditText,Button,TextView)Socket通信數據讀寫(DataInputStream/DataOutputStream)客戶端主要代碼:public void onClick(View v) Socket s = null;DataOutputStream dout = null;DataInputStream din = null;if(v = button1)/點擊的是按鈕try s = new Socket(02, 8888);/連接服務器dout = new DataOutputStream(s.getOutputStream();/

25、得到輸出流din = new DataInputStream(s.getInputStream();/得到輸入流dout.writeUTF(editText.getText().toString();/向服務器發送消息textView.setText(服務器發來的消息: + din.readUTF();/接收服務器發來的消息 catch (Exception e) e.printStackTrace();/打印異常信息 finally tryif(dout != null)dout.close();/關閉輸入流if(din != null)din.close();/關閉輸入流if(s != n

26、ull)s.close();/關閉Socket連接catch(Exception e)e.printStackTrace();/打印異常信息服務器ServerSocketAcceptDataInputStream/DataOutputStreamRead/Write服務器端主要代碼:ServerSocket ss = null;/ServerSocket的引用Socket s = null;/Socket的引用DataInputStream din = null;DataOutputStream dout = null;tryss = new ServerSocket(8888);/監聽到88

27、88端口System.out.println(已監聽到8888端口!);catch(Exception e)e.printStackTrace();/打印異常信息while(true)trys = ss.accept();/等待客戶端連接din = new DataInputStream(s.getInputStream();dout = new DataOutputStream(s.getOutputStream();/得到輸入輸出流String msg = din.readUTF();/讀一個字符串System.out.println(ip: + s.getInetAddress();/打

28、印客戶端IPSystem.out.println(msg: + msg);/打印客戶端發來的消息System.out.println(=);dout.writeUTF(Hello Client!);/向客戶端發送消息catch(Exception e)e.printStackTrace();/打印異常信息統一資源定位器URL:URL(Uniform Resource Locator)是一致資源定位器的簡稱,它表示Internet上某一資源的地址。通過URL我們可以訪問Internet上的各種網絡資源,比如最常見的WWW,FTP站點。瀏覽器通過解析給定的URL可以在網絡上查找相應的文件或其他資源

29、。URL的組成protocol:/resourceName協議名(protocol)指明獲取資源所使用的傳輸協議,如http、ftp、gropher、file等,資源名(resourceName)則應該是資源的完整地址,包括主機名、端口號、文件名或文件內部的一個引用。例如:http:/ 協議名:/主機名http:/ 協議名:/機器名文件名http:/:80/Gamelan/network.html#BOTTOM 協議名:/機器名端口號文件名內部引用.創建一個創建一個URL為了表示URL, 中實現了類URL。我們可以通過下面的構造方法來初始化一個URL對象:(1) public URL (Str

30、ing spec);(2) public URL(URL context, String spec);(3) public URL(String protocol, String host, String file);(4) public URL(String protocol, String host, int port, String file);解析一個解析一個URL一個URL對象生成后,其屬性是不能被改變的,但是我們可以通過類URL所提供的方法來獲取這些屬性 從從URL讀取讀取WWW網絡資源網絡資源當我們得到一個URL對象后,就可以通過它讀取指定的WWW資源。通過通過HttpURLCo

31、nnetction連接連接WWW 通過URL的方法openStream(),我們只能從網絡上讀取數據,如果我們同時還想輸出數據,例如向服務器端的CGI程序發送一些數據,我們必須先與URL建立連接,然后才能對其進行讀寫,這時就要用到類URLConnection了。CGI是公共網關接口(Common Gateway Interface)的簡稱,它是用戶瀏覽器和服務器端的應用程序進行連接的接口,有關CGI程序設計,請讀者參考有關書籍。類HttpURLConnetction也在包中定義,它表示Java程序和URL在網絡上的通信連接。當與一個URL建立連接時,首先要在一個URL對象上通過方法openCo

32、nnection()生成對應的HttpURLConnetction對象。如果連接過程失敗,將產生IOException. HttpURLConnection ucon = null; BufferedReader reader = null; StringBuilder bab=null; try URL myURL = new URL(http:/localhost/test.html);/初始化URL ucon = (HttpURLConnection)myURL.openConnection();/打開連接 ucon.setRequestMethod(GET); ucon.connect

33、(); reader =new BufferedReader(new InputStreamReader(ucon.getInputStream(),gb2312);/得到輸入流 String currentline; bab = new StringBuilder(); while(currentline=reader.readLine() != null) bab.append(currentline);/將收到的信息添加到StringBuilder中 bab.append(rn); jsonstring=bab.toString(); catch (Exception e) e.prin

34、tStackTrace();/打印異常信息 finally try if(reader!=null) reader.close(); catch (IOException e) e.printStackTrace(); What iJavaScript Object Notation輕量級的數據交換格式描述數據的格式輕量級(格式簡單,一個頁面的官網)易于人閱讀和編寫易于機器解析和生成獨立于語言文本格式使用早期是網頁瀏覽器與Web服務器之間交互數據的格式與XML一起作為Ajax返回的兩種主要格式由于其輕量級的原因,逐漸成為主流的數據交換格式對對無序的“名稱/值對”集合一個對象以“”(左括號)開始

35、,“”(右括號)結束每個“名稱”后跟一個“:”(冒號),再后跟著值,構成一個“名稱/值對”每個“名稱/值對”之間用“,”(逗號)分隔例如: name: Li Lei, Gender: male, age: 35 數數有序的值的集合一個數組以“”(左中括號)開始,“”(右中括號)結束值之間使用“,”(逗號)分隔例如: 1, 2, 3, 4, 5, 6, 7, 8, 9 A, B, C, D 值的字符串數值truefalsenull對象數組字數JSON 解析JSON 數據時,首先需要明確待解析的是JSON Object 還是JSON Array,然后再解析JSON Object,name 為名稱,

36、Lili 是name 的值,將name 和Lili 用“:”隔開,其文本形如:name:Lili/ 新建JSONObject, jsonString 字符串中為上面的JSON 對象的文本JSONObject demoJson = new JSONObject(jsonString);/ 獲取name 名稱對應的值String s = demoJson.getString(name);解析JSON Array一個簡單的JSONArray,number 為數組名稱,1,2,3為數組的內容,其JSON文本表示如:number:1,2,3/ 新建JSONObject 對象,將jsonString 字符

37、串轉換為JSONObject 對象/ jsonString 字符串為上面的文本JSONObject demoJson = new JSONObject(jsonString);/ 獲取number 對應的數組JSONArray numberList = demoJson.getJSONArray(number);/ 分別獲取numberList 中的每個值for(int i=0; inumberList.length(); i+)/ 因為數組中的類型為int,所以為getInt,其他getString、getLong 具有類似的用法System.out.println(numberList.g

38、etInt(i);使用Vol目的:圖像緩存,請求的調度特自動調度網絡請求多個并發的網絡連接通過使用標準的HTTP緩存機制保持磁盤和內存響應的一致支持請求優先級支持取消請求的強大API,可以取消單個請求或多個易于定制健壯性:便于正確的更新UI和獲取數據包含調試和追蹤工具Voll下載Volley構建一個RequestQueueRequestQueue requestQueue=Volley.newRequestQueue(this);/這里的this指的是Context創建一個Requestprivate final String url=http:/xxxxx/所需url JsonObjectR

39、equest req=new JsonObjectRequest(url,null,new Response.Listener() Override public void onResponse(JsonObject response) , new ResponseError.Listener() Override public void onResponseError(VollerError error) );將req添加到requestQueueGso下載,放入libs目錄/name:name0,age:0Person person = gson.fromJson(str, Person.

40、class);/name:name0,age:0,name:name1,age:5,name:name2,age:10List ps = gson.fromJson(str, new TypeTokenList().getType();實使用糯米團的api接口http:/ errno: 0, msg: success, deals: deal_id: 11078851, image: *, tiny_image: *, title: 漫火鍋, min_title: 漫火鍋100元代金券, description: 王府井店100元代金券!可疊加使用,節假日通用,提供免費WiFi!, market_price: 10000, current_price: 9000, promotion_price: 9000, sale_num: 1159, score: 4.85, comment_num: 26, deal_url: *, deal_murl: * , public class contentbean String deal_id;String image;String tiny_image;String title;String min_title;String description;floa

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論