編輯:關於Android編程
一、Socket通信簡介
Android與服務器的通信方式主要有兩種,一是Http通信,一是Socket通信。兩者的最大差異在於,http連接使用的是“請求—響應方式”,即在請求時建立連接通道,當客戶端向服務器發送請求後,服務器端才能向客戶端返回數據。
而Socket通信中基於TCP/IP協議的通信則是在雙方建立起連接後就可以直接進行數據的傳輸,在連接時可實現信息的主動推送,而不需要每次由客戶端想服務器發送請求。而UDP則是提供無連接的數據報服務,UDP在發送數據報前不需建立連接,不對數據報進行檢查即可發送數據包。。 那麼,什麼是socket?Socket又稱套接字,在程序內部提供了與外界通信的端口,即端口通信。通過建立socket連接,可為通信雙方的數據傳輸傳提供通道。
1.1什麼是Socket Socket
是一種抽象層,應用程序通過它來發送和接收數據,使用Socket可以將應用程序添加到網絡中,與處於同一網絡中的其他應用程序進行通信。簡單來說,Socket提供了程序內部與外界通信的端口並為通信雙方的提供了數據傳輸通道。
1.2Socket的分類
根據不同的的底層協議,Socket的實現是多樣化的。本文中只介紹TCP/IP協議和UDP協議的通信,在這個協議族當中主要的Socket類型為流套接字(streamsocket)和數據報套接字(datagramsocket)。流套接字將TCP作為其端對端協議,提供了一個可信賴的字節流服務。數據報套接字使用UDP協議,提供數據打包發送服務。 下面,我們來認識一下這兩種Socket類型的基本實現模型。
二、Socket 基本通信模型
三、Socket基本實現原理
3.1基於TCP協議的Socket
1、服務器端首先聲明一個ServerSocket對象並且指定端口號,然後調用Serversocket的accept()方法接收客戶端的數據。accept()方法在沒有數據進行接收的處於堵塞狀態。(Socketsocket=serversocket.accept()),一旦接收到數據,通過inputstream讀取接收的數據。
2、客戶端創建一個Socket對象,指定目標主機(服務器端)的ip地址和端口號(Socketsocket=newSocket("172.168.10.108",8080);),然後獲取客戶端發送數據的輸出流(OutputStreamoutputstream=socket.getOutputStream()),最後將要發送的數據寫入到outputstream即可進行TCP協議的socket數據傳輸。
3.2基於UDP協議的數據傳輸
1、服務器端首先創建一個DatagramSocket對象,並且指點監聽的端口。接下來創建一個空的DatagramPacket數據包對象並指定大小,用於接收數據(byte[] data=new byte[1024];DatagramPacket packet=new DatagramPacket(data,data.length)),使用DatagramSocket的receive方法接收客戶端發送的數據(datagramSocket.receive(packet)),receive()與serversocket的accepet()類似,在沒有數據進行接收的處於堵塞狀態。
2、客戶端也創建個DatagramSocket對象,並且指點監聽的端口。接下來創建一個InetAddress對象,這個對象是一個網絡地址(InetAddress serveraddress=InetAddress.getByName("172.168.1.100")).定義要發送的一個字符串,創建一個DatagramPacke數據包t對象,並制定要講這個數據報包發送到網絡的哪個地址以及端口號,最後使用DatagramSocket的對象的send()發送數據包。(String str="hello";byte[] data=str.getByte();DatagramPacket packet=new DatagramPacket(data,data.length,serveraddress,4567);socket.send(packet);)
好了,下面就來看看代碼怎麼實現吧!
四、實現android基於TCP/IP協議的通信
1、Android端(客戶端)代碼:
2、服務端代碼:
再貼出結果吧:
服務器顯示:
192.168.1.102
192.168.1.102
HelloKitty,Java,哈哈哈
【總結】基於Socket流式網絡編程,也即使用TCP/IP協議,可以對文件的傳輸進行操作
五、實現android基於UDP協議的通信
1、Android端(客戶端)代碼:
2、服務端代碼:
客戶端圖片:
服務器顯示:
192.168.1.102發送:HelloKitty,Java,哈哈哈,這是udp
【注】udp的多播還沒實現,實現後我會加上來的
好了,這樣就實現了基本的Socket網絡編程了,注意:在android端使用時還需要加入權限哦:
1. 何為1G/ 2G/ 3G/ 4G技術1.1. G代表什麼?G代表Generation的簡稱,有代的意思。1G代表作是大哥大,采用通信標准是模擬制式,只能進行語音通話
引言:去年Android 6.0發布後,其新引入的(Requesting Permissions at Run Time)運行時權限就備受開發者關注,隨著今年國內手機廠商
Android多終端適配是我們在實際開發中必然會遇到也必然要解決的問題,解決多終端適配的方法有很多,比如使用百分比布局庫(percent-support-lib)、在re
Android Debug Bridge,Android調試橋接器,簡稱adb,是用於管理模擬器或真機狀態的萬能工具。平時大家在開發android應用過程中,可能沒有直接