Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android客戶端通過Socket連接服務器

Android客戶端通過Socket連接服務器

編輯:關於Android編程

Android客戶端通過Socket連接服務器。


Android互聯網項目中,絕大部分都有連接遠程服務器的需求,連接的方式有多種,可以是TCP的方式,當然也可以通過Socket的方式。
相對於TCP的方式,Socket的方式略顯的較為原始,對於客戶端來說,復雜度反而比TCP的方式還要高一些,畢竟TCP的連接有現成的框架可以使用,
比如Spring等。 而使用socket方式這些工作完全需要客戶端來做,也增加了客戶端的工作量,不過凡事有利弊,通過socket的方式,流量上
相對於TCP等的方式更加可控,畢竟少了很多沒有用的信息傳遞。


大概思路如下:


客戶端首次連接服務器:

socket = new Socket();
				SocketAddress address = new InetSocketAddress(svrHost, svrPort);
				socket.connect(address, TIME_OUT);
				socket.setSoTimeout(TIME_OUT);
				in = new BufferedReader(new InputStreamReader(
						socket.getInputStream()));
				
				out = new PrintWriter(new BufferedWriter(
						new OutputStreamWriter(socket.getOutputStream())), true);


連接服務器之後,調用注冊或者登錄,獲取連接的token。 以後每次的連接獲取信息都要帶上約定的token。


連接建立以後,socket不必關閉,畢竟每次connect也浪費資源,可以一直掛住等待服務端的推送或者心跳等消息。
while (!exitSocket) {
				try {
					if (!socket.isClosed() && socket.isConnected()
							&& !socket.isInputShutdown()) {

						char[] lenBuffer = new char[13];
						int len = 0;
						try  {
							len = in.read(lenBuffer);
						} catch (Exception e) {
							Utils.debug(SocketSvr socket read timeout);
							stopSocketByException(true);
						}



每次的請求,server端返回的數據都包含在lenBuffer中,一般是約定好的json或者是其他格式的信息。


整體思路是和TCP是一樣的,更多的問題出現在細節處理上和socket的生命周期的維護上。


比如如果斷網或者出現異常導致socket出現exception,這時可能需要把當前的socket關閉(timeoutException應該不需要重啟),然後重新啟動新的socket,
但是對於終端用戶來說,應當避免的是讓用戶感覺到有界面的異動,需要立即重新連接server。


以上是一個簡單的socket客戶端的模型。供參考。



 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved