編輯:關於Android編程
一、TCP/IP協議基礎
IP協議:保證計算機能發送和接收分組數據,用戶網絡尋址,負責將消息從一個主機傳送到另一主機,消息發送的時候被分割成一個個小包;
TCP協議:負責收集這些信息,並將其按適當的次序放好傳送,在接收端收到後再正確地還原,並通過重發機制保證了數據在傳送的過程中准確無誤;
在通信的兩端建立一個Socket,從在通信的兩端之間建立虛擬的鏈路進行通信;
二、使用ServerSocket創建TCP服務器端
建立了鏈路之後並沒有服務端和客戶端之分,在建立鏈路之前,必須有一個通信實體做出“主動姿態”接收其它通信實體的連接;
ServerSocket用來監聽來自客戶端的Socket連接,如果沒有連接,它一直處於等待狀態;
Socket accept()方法:監聽客戶端的連接請求,如果接收到返回一個Socket對象與連接客戶端Socket對應的Socket(通常通過不斷的循環調用ServerSocket的accept()方法);
提供了如下幾個構造方法:
ServerSocket(int port)方法:用指定端口port來創建一個ServerSocket,該端口應該是一個有效的端口數值:0~65535(綁定默認的IP,通常綁定1024以上的端口,為了避免和其它程序的沖突);
ServerSocket(int port,int backlog)方法:增加了一個用來改變隊列長度的參數backlog;
SetverSocket(int port,int backlog,InetAddress localAddr):在機器存在多個IP的情況下,允許通過localAddr這個參數來指定將ServerSocket綁定到指定的Ip地址;
當ServerSocket使用完畢後,應使用ServerSocket的close()方法關閉該ServerSocket;
三、使用Socket進行通信
客戶端通常使用Socket的構造器來連接指定的服務器,提供了如下幾個構造方法:
Socket(inetAddress/String remoteAddress,int port):創建到指定遠程主機,遠程端口的Socket(默認使用本地默認IP);
Socket(intAddress/String remoteAddress,int port,InetAddress localAddr,int localPort):創建連接到指定遠程主機、遠程端口的Socket,並指定本地的IP地址和本地的端口(適用於本地多個IP地址的情形);
當構造Socket對象後,就會連接指定服務器,讓服務器端的ServerSocket的accept()方法執行,產生一對相互連接的Socket;
當客戶端和服務端產生了對應的Socket之後,程序在無須區分客戶端和服務端,而是通過各種的Socket進行通信,Socket提供了如下兩個方法來獲取輸入流和輸出流:
InputStream getInputStream()方法:返回該Socket對象對應的輸入流,讓程序通過該輸入流從Socket讀取數據;
OutputStream getOutputStream()方法:返回該Socket對象對應的輸出流,讓程序通過該輸出流向Socket輸出數據;
在實際應用中,程序可能不像讓執行網絡連接、讀取服務器數據一直阻塞,而是希望網絡連接、讀取操作超過合理事件後,系統自定認為操作失敗,即超時時長,提供了一個setToTimeout(int timeout)來設置超時時長;
加入多線程:
在服務端,為accept()方法產生的每個Socket創建一個單獨的線程ServerThread(Socket socket)處理與客戶端的通信;
在客戶端,為通信的Socket單獨建立一個線程,通過連個Handler分別將接受服務器的消息發送給主線程,將主頁面輸入的信息發送到單獨線程中;
本文實例講述了Android改變手機屏幕朝向的方法。分享給大家供大家參考。具體如下:模擬當點擊按鈕時,使手機朝向發生改變。main.xml布局文件:<?xm
導讀這篇文章中我不會使用概念性文字來說明裝飾者模式,因為通常概念性的問題都很抽象,很難懂,使得讀者很難明白到底為什麼要使用這種設計模式,我們設計模式的誕生,肯定是前輩們在
下面這張圖片是在google官網上下載的關於android系統的體系結構圖: 組件所使用的C、C++庫的集合,一般說來,android應用開發者不能直接調
1、ctrl + shift + z 我想就連沒編過程序的人都知道 ctrl + z 是回退鍵,但是很少人知道 這個“前進鍵”吧,事實上這個快捷鍵