android與伺服器數據交互
Ⅰ 如何實現android客戶端與服務端數據同步
android客戶端不能直接與伺服器資料庫連接,拿sqlserver來說,安裝之後有幾個G那麼大,android程序是跑在手機上的,想讓程序直接訪問sqlserver,那手機需要非常大的內存。但是可以通過webservice這樣一個橋梁來間接訪問SQLServer。
即在伺服器運行一個服務端程序,該服務端程序通過接收來自android客戶端的指令,對資料庫進行操作。客戶端與服務端直接的數據傳輸主要通過http協議發送和接收json數據或者xml數據,服務端接收到客戶端的json數據之後,進行json解析,再按一定的邏輯對資料庫進行增、刪、改、查。客戶端的http請求可以通過 HttpClient類實現,在anddroid 4.0之後,客戶端的網路請求已經不被允許在主線程中運行,所以題主還需注意另開啟一個子線程進行網路請求。
Ⅱ android 中頻繁大數據交互用什麼通信
對於目前的狀況來說,移動終端的網路狀況沒有PC網路狀況那麼理想。在一個Android應用中,如果需要接收來自伺服器的大容量數據,那麼就不得不考慮客戶的流量問題。本文根據筆者的一個項目實戰經驗出發,解決大容量數據的交互問題,解決數據大小會根據實際情況動態切換問題(伺服器動態選擇是否要壓縮數據,客戶端動態解析數據是否是被壓縮的),還有數據交互的編碼問題。
解決數據過大的問題,最直觀的方法就是壓縮數據。伺服器將需要傳遞的數據先進行壓縮,再發送給Android客戶端,Android客戶端接收到壓縮的數據,對其解壓,得到壓縮前的數據。
如果規定Android客戶端和伺服器的交互數據必須是經過某種壓縮演算法後的數據,那麼這種「規定」失去了視具體情況而定的靈活性。筆者擬將Http協議進行封裝,將動態的選擇傳輸的數據是否要經過壓縮,客戶端也能動態的識別,整理並獲得伺服器想要發送的數據。Android客戶端向伺服器請求某個方面的數據,這個數據也許是經過壓縮後傳遞比較合適,又也許是將原生數據傳遞比較合適。也就是說,筆者想要設計一種協議,這種協議適用於傳輸數據的數據量會動態的切換,也許它會是一個小數據,也許它又會是一個數據量龐大的大數據(大數據需要經過壓縮)。
可能說的比較抽象,那麼我用實際情況解釋一下。
我項目中的一個實際情況是這樣的:這個項目是做一個Android基金客戶端,Android客戶端向伺服器請求某一個基金的歷史走勢信息,由於我的Android客戶端實現了本地緩存,這讓傳遞數據的大小浮動非常大。如果本地緩存的歷史走勢信息的最新日期是5月5日,伺服器的歷史走勢信息的最新日期是5月7日,那麼伺服器就像發送5月6日和5月7日這兩天的走勢信息,這個數據很小,不需要壓縮(我使用的壓縮演算法,對於數據量過小的數據壓縮並不理想,數據量過小的數據壓縮後的數據會比壓縮前的數據大)。然而,Android客戶端也可能對於某個基金沒有任何的緩存信息,那麼伺服器將發送的數據將是過去三四年間的歷史走勢信息,這個數據會有點大,就需要進行壓縮後傳遞。那麼客戶端對於同一個請求得到的數據,如何判斷它是壓縮後的數據還是未曾壓縮的數據呢?
筆者使用的解決方案是把傳遞數據的第一個位元組作為標識位元組,將標識這個數據是否被壓縮了。也能標識傳遞數據的編碼問題。Android對於接收到的數據(位元組數組),先判斷第一個位元組的數據,就能根據它所代表的數據格式和編碼信息進行相應的操作。說了那麼多,也許不如看實際的代碼理解的快。首先是壓縮演算法,這里筆者用到的是jdk自帶的zip壓縮演算法。
Ⅲ android平台的app 手機客戶端和後台伺服器怎麼進行數據交互的
首先不要管安卓端還是蘋果端,現在一般都是響應式的app,你放到安卓或者蘋果或者pc或者平板都是沒有問題的。一般採用的是http介面通訊,或者socket連接。具體你要去查資料找Demo了。而且現在主流是採用html5開發或者混合開發了。所以最好是伺服器提供appAPI介面,通過http訪問伺服器,獲取數據,數據一般是json,或者xml,拿到後解析數據就可以了,然後再用UI框架或者其他框架或者自定義的UI封裝下格式很漂亮了,至於cookie和session等,看你的習慣,網路驗證和簽名那些也自己看習慣,如果涉及到大數據,還需要引入第三方框架的,直接引入就可以了,不過推薦自己寫,防止侵權。都是很通用的。
Ⅳ android中怎麼利用protobuf協議進行與伺服器間的數據傳輸
1. 從http://maven.apache.org/download.cgi下載apache-maven-3.3.9-bin.zip,解壓至D:\AndroidDevelop目錄。
配置環境變數:
MAVEN_HOME:D:\AndroidDevelop\apache-maven-3.3.9;
Path=%MAVEN_HOME%bin;
2.從https://github.com/google/protobuf/releases下載protobuf-java-3.1.0.zip,protoc-3.1.0-win32.zip。
將protobuf-java-3.1.0.zip解壓至D:\AndroidDevelop目錄,將protoc-3.1.0-win32.zip中的protoc.exe解壓至D:\AndroidDevelop\protobuf-3.1.0\src目錄,並復制到D:\AndroidDevelop\protobuf-3.1.0\java目錄,打開命令行cd到此目錄,執行protoc --java_out=../src/java -I ../src/google/protobuf/descriptor.proto,
Ⅳ 安卓手機客戶端可以通過哪些方式與PC伺服器端通信
有如下的方法供選擇:
1. 利用USB口和USB連接線:
電腦可以將手機客戶端作為一個終端訪問,此時需要一款第三方軟體,比如金山手機、豌豆莢、360等等。
也可以將手機作為一個外部存儲器直接訪問手機的存儲位置來傳遞文件。
2.利用手機和電腦的藍牙,採用藍牙進行通訊。藍牙通訊的距離一般小於10米。藍牙建立連接之後,一般藍牙的協議之中帶有終端訪問功能,可以直接傳輸文件。
3.利用wifi,兩者都連接本地或公共wifi【手機通常有wifi,如果電腦沒有無線,用有線連接網路也可以】:
通過共享文件夾的方式,互相訪問傳輸文件。
也可以安裝第三方FTP服務端和客戶端軟體,實現FTP文件傳輸。
或者利用郵箱,自己發給自己,自己在另一個設備上接收下載完成文件傳輸。
4.還有一種方法,就是兩者都安裝微信,同時開通他們,在微信中傳輸文件,另一台機器上將文件下載下來就可以了。
可能還有其他方法,取決於你對這些機器的理解程度。因為他們實際上都是網路上的一個節點。
Ⅵ android開發中,如何連接伺服器,從伺服器讀取到數據
伺服器端生成JSON:
使用HttpURLConnection連接,通過JSON格式傳遞對象數據
URLurl=newURL(urlpath);
HttpURLConnectionconn=(HttpURLConnection)url.openConnection();
InputStreaminStream=conn.getInputStream();
=newByteArrayOutputStream();
byte[]data=newbyte[1024];
intlen=0;
while((len=inStream.read(data))!=-1){
outStream.write(data,0,len);
System.out.println(len);
}
inStream.close();
byte[]rlt=outStream.toByteArray();
returnnewString(rlt);
Ⅶ android客戶端和伺服器端怎麼交互
android客戶端和伺服器端是基於IntentService的,具體如下:
後台使用簡單的servlet,支持GET或POST。這個servlet最終返回給前台一個字元串flag,值是true或false,表示登錄是否成功。
然後在安卓的ADT上創建一個安卓項目,建立兩個Activity,分別作為登錄界面和登錄成功界面。
HTTP的訪問公共類,用於處理GET和POST請求。
IntentService服務,用於在後台以隊列方式處理耗時操作。
在AndroidManifest.xml中注冊IntentService。注意uses-permission節點,為程序開啟訪問網路的許可權。
登陸界面處理,注意按鈕監聽事件中,使用Intent將要傳遞的值傳給service。接收廣播類中,同樣使用Intent將要傳遞的值傳給下一個Activity。在onCreate()中,動態注冊接收廣播類的實例receiver。在接收廣播類中,不要使用完畢後忘記注銷接收器,否則會報一個Are you missing a call to unregisterReceiver()? 的異常。
Ⅷ Android伺服器通信的幾種方式詳解
大 學學習網路基礎的時候老師講過,網路由下往上分為物理層、數據鏈路層、網路層、傳輸層、會話層、表示層和應用層。通過初步的了解,我知道IP協議對應於網 絡層,TCP協議對應於傳輸層,而HTTP協議對應於應用層,三者從本質上來說沒有可比性,socket則是對TCP/IP協議的封裝和應用(程序員層面 上)。也可以說,TPC/IP協議是傳輸層協議,主要解決數據如何在網路中傳輸,而HTTP是應用層協議,主要解決如何包裝數據。關於TCP/IP和 HTTP協議的關系,網路有一段比較容易理解的介紹: 「我們在傳輸數據時,可以只使用(傳輸層)TCP/IP協議,但是那樣的話,如果沒有應用層,便無法識別數據內容,如果想要使傳輸的數據有意義,則必須使 用到應用層協議,應用層協議有很多,比如HTTP、FTP、TELNET等,也可以自己定義應用層協議。WEB使用HTTP協議作應用層協議,以封裝 HTTP文本信息,然後使用TCP/IP做傳輸層協議將它發到網路上。」
而我們平時說的最多的socket是什麼呢,實際上socket是對TCP/IP協議的封裝,Socket本身並不是協議,而是一個調用介面(API), 通過Socket,我們才能使用TCP/IP協議。實際上,Socket跟TCP/IP協議沒有必然的聯系。Socket編程介面在設計的時候,就希望也 能適應其他的網路協議。所以說,Socket的出現只是使得程序員更方便地使用TCP/IP協議棧而已,是對TCP/IP協議的抽象,從而形成了我們知道 的一些最基本的函數介面,比如create、listen、connect、accept、send、read和write等等。網路有一段關於 socket和TCP/IP協議關系的說法比較容易理解:「TCP/IP只是一個協議棧,就像操作系統的運行機制一樣,必須要具體實現,同時還要提供對外 的操作介面。這個就像操作系統會提供標準的編程介面,比如win32編程介面一樣,TCP/IP也要提供可供程序員做網路開發所用的介面,這就是 Socket編程介面。」
關於TCP/IP協議的相關只是,用博大精深來講我想也不為過,單單查一下網上關於此類只是的資料和書籍文獻的數量就知道,這個我打算會買一些經典的書籍 (比如《TCP/IP詳解:卷一、卷二、卷三》)進行學習,今天就先總結一些基於基於TCP/IP協議的應用和編程介面的知識,也就是剛才說了很多的 HTTP和Socket。
CSDN上有個比較形象的描述:HTTP是轎車,提供了封裝或者顯示數據的具體形式;Socket是發動機,提供了網路通信的能力。
實際上,傳輸層的TCP是基於網路層的IP協議的,而應用層的HTTP協議又是基於傳輸層的TCP協議的,而Socket本身不算是協議,就像上面所說,它只是提供了一個針對TCP或者UDP編程的介面。
下面是一些經常在筆試或者面試中碰到的重要的概念,特在此做摘抄和總結。
一。什麼是TCP連接的三次握手
第一次握手:客戶端發送syn包(syn=j)到伺服器,並進入SYN_SEND狀態,等待伺服器確認;
第二次握手:伺服器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時伺服器進入SYN_RECV狀態;
第三次握手:客戶端收到伺服器的SYN+ACK包,向伺服器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和伺服器進入ESTABLISHED狀態,完成三次握手。
握手過程中傳送的包里不包含數據,三次握手完畢後,客戶端與伺服器才正式開始傳送數據。理想狀態下,TCP連接一旦建立,在通信雙方中的任何一方主動關閉 連接之前,TCP 連接都將被一直保持下去。斷開連接時伺服器和客戶端均可以主動發起斷開TCP連接的請求,斷開過程需要經過「四次握手」(過程就不細寫了,就是伺服器和客 戶端交互,最終確定斷開)
二。利用Socket建立網路連接的步驟
建立Socket連接至少需要一對套接字,其中一個運行於客戶端,稱為ClientSocket ,另一個運行於伺服器端,稱為ServerSocket 。
套接字之間的連接過程分為三個步驟:伺服器監聽,客戶端請求,連接確認。
1。伺服器監聽:伺服器端套接字並不定位具體的客戶端套接字,而是處於等待連接的狀態,實時監控網路狀態,等待客戶端的連接請求。
2。客戶端請求:指客戶端的套接字提出連接請求,要連接的目標是伺服器端的套接字。為此,客戶端的套接字必須首先描述它要連接的伺服器的套接字,指出伺服器端套接字的地址和埠號,然後就向伺服器端套接字提出連接請求。
3。 連接確認:當伺服器端套接字監聽到或者說接收到客戶端套接字的連接請求時,就響應客戶端套接字的請求,建立一個新的線程,把伺服器端套接字的描述發給客戶 端,一旦客戶端確認了此描述,雙方就正式建立連接。而伺服器端套接字繼續處於監聽狀態,繼續接收其他客戶端套接字的連接請求。
三。HTTP鏈接的特點
HTTP協議即超文本傳送協議(Hypertext Transfer Protocol ),是Web聯網的基礎,也是手機聯網常用的協議之一,HTTP協議是建立在TCP協議之上的一種應用。
HTTP連接最顯著的特點是客戶端發送的每次請求都需要伺服器回送響應,在請求結束後,會主動釋放連接。從建立連接到關閉連接的過程稱為「一次連接」。
四。TCP和UDP的區別(考得最多。。快被考爛了我覺得- -\\)
1。 TCP是面向鏈接的,雖然說網路的不安全不穩定特性決定了多少次握手都不能保證連接的可靠性,但TCP的三次握手在最低限度上(實際上也很大程度上保證 了)保證了連接的可靠性;而UDP不是面向連接的,UDP傳送數據前並不與對方建立連接,對接收到的數據也不發送確認信號,發送端不知道數據是否會正確接 收,當然也不用重發,所以說UDP是無連接的、不可靠的一種數據傳輸協議。
2。也正由於1所說的特點,使得UDP的開銷更小數據傳輸速率更高,因為不必進行收發數據的確認,所以UDP的實時性更好。
知 道了TCP和UDP的區別,就不難理解為何採用TCP傳輸協議的MSN比採用UDP的QQ傳輸文件慢了,但並不能說QQ的通信是不安全的,因為程序員可以 手動對UDP的數據收發進行驗證,比如發送方對每個數據包進行編號然後由接收方進行驗證啊什麼的,即使是這樣,UDP因為在底層協議的封裝上沒有採用類似 TCP的「三次握手」而實現了TCP所無法達到的傳輸效率。